hdu 5363 Key Set

来源:互联网 发布:淘宝客怎么赚佣金 编辑:程序博客网 时间:2024/06/07 03:36

Key Set

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1857    Accepted Submission(s): 973

Problem Description
soda has a set S with n integers {1,2,,n}. A set is called key set if the sum of integers in the set is an even number. He wants to know how many nonempty subsets ofS are key set.
 

Input
There are multiple test cases. The first line of input contains an integerT(1T105), indicating the number of test cases. For each test case:

The first line contains an integer n(1n109), the number of integers in the set.
 

Output
For each test case, output the number of key sets modulo 1000000007.
 

Sample Input
41234
 

Sample Output
0137
 

Author
zimpha@zju


题意and题解:给出一个数n,集合S中的元素就有n个(1~n),找出S的所有非空子集中   子集元素和   为偶数的   子集个数!(不理解的多读几遍)。子集个数为2^(n-1)-1个,
怎么求呢?如果直接求肯定超时啊,这就用到了快速幂的方法了,见代码:


<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">#include<cstdio>#define M 1000000007int main(){    __int64 t,n;    scanf("%I64d",&t);    while(t--)    {        scanf("%I64d",&n);        __int64 ans=1,base=2;        n--;        while(n)        {            if(n&1)            {                ans=(ans*base)%M;  //同余定理             }            base=(base*base)%M;            n=n/2;        }        printf("%I64d\n",ans-1);    }}</span></span>




0 0
原创粉丝点击