今天帮学弟看了下这道题
顺便学习了一下学弟的思路
先对不是o的算出排列数,然后用o进行插入,插入的时候不用管原来的位置是怎样的,只需要保证两个数之间只插一个o。想了很久才想清楚
再说下学弟的问题,因为用到了pow函数,可能是测试网站编译器的pow函数不支持__int64,所以老错,后来终于找出原因了
#include<stdio.h>
__int64 s(__int64 a,__int64 n){
__int64 i;
__int64 m=1;
for(i=0;i<n;i++)
m=m*(a-i)/(i+1);
return m;
}
__int64 pow(__int64 a,__int64 b){
__int64 s=1;
for(int i=1;i<=b;i++) s*=a;
return s;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif // ONLINE_JUDGE
__int64 m;
__int64 n,i,j;
while(scanf("%I64d",&n)!=EOF)
{
j=n%2+n/2;
m=pow(2,n);
for(i=1;i<=n;i++)
m+=s(n-i+1,i)*pow(2,n-i);
printf("%I64d\n",m);
}
return 0;
}