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;
}
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;
}
相关文章推荐
- HDU 1297(大数+规律)
- HDU 4279 Number 第37届ACM/ICPC天津赛区网络赛1002题 (简单规律题)
- HDU 4919 打表找规律 java大数 map 递归
- hdu 4278 Faulty Odometer(进制转换,找规律)
- HDU 1525 Euclid's Game (博弈、找规律)*
- HDU 4990 Reading comprehension(找规律+矩阵快速幂)
- hdu 5963(找规律)
- HDU 6154 CaoHaha's staff 找规律
- HDU-5810-Balls and Boxes-数学推导(找规律)
- HDU 5047 Sawtooth (规律+java各种读入输出模板)
- HDU 4704 Sum (2013多校10,1009题)
- hdu 1020 找规律
- 数论+快速幂-hdu-4704-Sum
- HDU 5826 physics (数学推导)(规律)
- HDU 5100 Chessboard (用k×1的矩形覆盖n×n的正方形)(找规律)
- hdu 1030 Delta-wave(找规律)
- hdu-4704 (a^b)%c
- HDU 1021 Fibonacci Again(斐波那契数列+mod规律)
- HDU_2147——组合博弈,转换为P/N图,然后找规律
- 找规律,模拟(HDU 5308,I Wanna Become A 24-Point Master)