您的位置:首页 > 其它

HDU 5363 Key Set

2016-05-31 20:16 197 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5363

题意:给出一个大小为n集合,问有多少子集合里数的和等于一个偶数

思路:有n/2个偶数,n/2个奇数(设n是偶数),可以选取的偶数一共有:C(n/2,0)+C(n/2,1)+……+C(n/2,2)=2^(n/2)种情况,而可以选取的奇数有:C(n/2,0)+C(n/2,2)+……+C(n/2,n)=(2^n/2)/2种情况,乘起来就好了等于2^(n-1),最后要减去一个空集

<span style="font-size:18px;">#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define LL long long
#define mod 1000000007
using namespace std;

LL Pow (LL a,LL b)
{
LL x=1;
while (b)
{
if (b%2==1)
x=(a*x)%mod;
a=(a*a)%mod;
b/=2;
}
return x;
}

int main()
{
int t;
LL n;
scanf("%d",&t);
while (t--)
{
scanf("%I64d",&n);
LL res=Pow(2,n-1)-1;
printf("%I64d\n",res);
}
//(1+x)^n=cn1 * x^n + cn2 * x^(n-1)……+cnn * x^0
}
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM HDU