ural1057 Amount of Degrees

链接

这题有一点小坑点 就是AX^B  A只能为0或者1  ,剩下的就比较好做的了。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 LL dp[35][35][11];
18 int d[35];
19 LL dfs(int i,int e,int k,int b)
20 {
21     if(i==-1)
22     return k==0;
23     if(!e&&dp[i][k][b] != -1) return dp[i][k][b];
24     int mk = e?d[i]:1;
25     int ans = 0;
26     mk = min(1,mk);
27     for(int j = 0 ;j <= mk ;j++)
28     {
29         if(k-j>=0)
30         {
31             ans+=dfs(i-1,e&&j==d[i],k-j,b);
32         }
33     }
34     return e?ans:dp[i][k][b] = ans;
35 }
36 LL cal(int x,int k,int b)
37 {
38     int g = 0;
39     while(x)
40     {
41         d[g++] = x%b;
42         x/=b;
43     }
44     return dfs(g-1,1,k,b);
45 }
46 int main()
47 {
48     int x,y,k,b;
49     memset(dp,-1,sizeof(dp));
50     while(cin>>x>>y)
51     {
52         cin>>k>>b;
53         cout<<cal(y,k,b)-cal(x-1,k,b)<<endl;
54     }
55     return 0;
56 }
View Code

 

posted @ 2014-04-23 15:32  _雨  阅读(190)  评论(0编辑  收藏  举报