您的位置:首页 > 其它

HDU-4704 找规律

2013-08-29 20:39 190 查看
本题是要我们看懂题意:

S(k)是表示从{x1,x2,x3....xk)中选取k个可以使得x1+x2+x3+...xk=N,问我们求(S(1)+S(2)+....S(k))%Mod=?,Mod=10^9+7;

简要分析:

s(k) 意思从集合中选取k个元素可以使得他们的和为N,这就相当,ans=(S(1)+S(2)+...S(k))%Mod,这就相当于把数字N拆分有多少种方案,答案是2^(N-1)。

代码:

#include<stdio.h>
#include<string.h>
#define Mod 1000000007
typedef __int64 LL;
char st[100001];
LL quick_pow(LL a,LL k)
{
LL ans=1;
while(k){
if(k&1) ans=(ans*a)%Mod;
a=(a*a)%Mod;
k>>=1;
}
return ans;
}

int main()
{
int n;
LL sum;
while(scanf("%s",st)!=EOF){
n=strlen(st);
sum=0;
for(int i=0;i<n;i++){
sum=(sum*10+(st[i]-'0'))%(Mod-1);
}
sum=(sum+Mod-2)%(Mod-1);
printf("%I64d\n",quick_pow(2,sum));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  找规律