zoukankan      html  css  js  c++  java
  • ural1057 Amount of degrees 位数统计

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 int f[33][33];
     6 void init(){
     7     f[0][0] =1;
     8     for(int i=1;i<=31;i++){
     9         f[i][0] = f[i-1][0];
    10         for(int j=0;j<=i;j++)
    11             f[i][j] = f[i-1][j]+f[i-1][j-1];
    12     }
    13 }
    14 
    15 int change(int x,int b){
    16     string s;
    17     while(x){
    18         s = (char)(x%b+'0')+s;
    19         x = x/b;
    20     }
    21     for(int i=0;i<s.size();i++)
    22         if(s[i]>'1'){
    23             for(int j=i;j<s.size();j++)
    24                 s[j] = '1';
    25             break;
    26         }
    27     x =0;
    28     for(int i=0;i<s.size();i++){
    29         x = x|((s[s.size()-1-i]-'0')<<i);
    30     }
    31     return x;
    32 }
    33 
    34 int cal(int x,int k){
    35     int tot =0,ans =0;
    36     for(int i=31;i>0;i--){
    37         if(x&(1<<i)){
    38             tot++;
    39             if(tot>k) break;
    40             x = x^(1<<i);
    41         }
    42         if((1<<(i-1))<=x){
    43             ans += f[i-1][k-tot];
    44         }
    45     }
    46     if(tot + x==k) ans++;
    47     return ans;
    48 }
    49 
    50 int main()
    51 {
    52     init();
    53     int x,y;
    54     int k,b;
    55     cin>>x>>y>>k>>b;
    56     x= change(x,b);
    57     y = change(y,b);
    58     int resx = cal(x-1,k);
    59     int resy = cal(y,k);
    60     cout<<resy-resx<<endl;
    61     return 0;
    62 }
  • 相关阅读:
    HUST-1350 Trie
    hihocoder-第六十一周 Combination Lock
    hihocoder-1196 : 高斯消元·二
    hihocoder-1195 : 高斯消元·一
    SPOJ
    HDU-5074
    UVALive
    POJ-2195
    UVALive
    POJ-1556
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724263.html
Copyright © 2011-2022 走看看