您的位置:首页 > 其它

ural1057 Amount of Degrees

2014-04-23 15:32 288 查看
链接

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

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 100000
#define LL long long
#define INF 0xfffffff
const double eps = 1e-8;
const double pi = acos(-1.0);
const double inf = ~0u>>2;
LL dp[35][35][11];
int d[35];
LL dfs(int i,int e,int k,int b)
{
if(i==-1)
return k==0;
if(!e&&dp[i][k][b] != -1) return dp[i][k][b];
int mk = e?d[i]:1;
int ans = 0;
mk = min(1,mk);
for(int j = 0 ;j <= mk ;j++)
{
if(k-j>=0)
{
ans+=dfs(i-1,e&&j==d[i],k-j,b);
}
}
return e?ans:dp[i][k][b] = ans;
}
LL cal(int x,int k,int b)
{
int g = 0;
while(x)
{
d[g++] = x%b;
x/=b;
}
return dfs(g-1,1,k,b);
}
int main()
{
int x,y,k,b;
memset(dp,-1,sizeof(dp));
while(cin>>x>>y)
{
cin>>k>>b;
cout<<cal(y,k,b)-cal(x-1,k,b)<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: