代码一:
signed main(){
int a,b,k,ans,p;
while (~scanf("%lld",&a)){
k=9;
p=qpow(10,k,INF);
ans=0;
ans+=qpow(2,a+b-1,p);
if ((a+b)%2==0) ans+=C(a+b,(a+b)/2,p)/2%p;
printf("%0*lld\n",k,ans);
}
return 0;
}
代码二:
signed main(){
int a,b,k,ans,p;
while (~scanf("%lld",&a)){
k=9;
p=qpow(10,k,INF);
init(p);
ans=0;
for (int i=(a+b+1)/2;i<=a+b;++i){
ans=(ans+C(a+b,i,p))%p;
}
printf("%0*lld\n",k,ans);
}
return 0;
}
这个题孩子调了一周了qaq这两个代码片段输出是否一样?C里面部分都是用的是递推:
int c[400][400];
int C(int n,int m,int p){
for (int i=1;i<=n;++i){
for (int j=1;j<=m;++j){
c[i][j]=0;
}
}
for (int i=0;i<=n;++i){
c[i][0]=c[i][i]=1;
for (int j=1;j<i;++j){
c[i][j]=c[i-1][j-1]+c[i-1][j];
c[i][j]%=p;
}
}
return c[n][m];
}