求集合的非空子集中key的数量

Description

soda has a set  with  integers . 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 of  are key set.

Input

There are multiple test cases. The first line of input contains an integer  , indicating the number of test cases. For each test case:

The first line contains an integer  , the number of integers in the set.

Output

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

Sample Input

4

1

2

3

4

Sample Output

0

1

3

7

 1 #include<cstdio>
 2 __int64 f(__int64 a)
 3 {
 4     __int64 b=2;
 5     __int64 t=1;
 6     while(a)
 7     {
 8         if(a % 2 != 0)
 9         {
10             t=(t*b)%1000000007;
11         }
12         b=b*b%1000000007;
13         a/=2;
14     }
15     return t;
16 }
17 int main()
18 {
19     int t;
20     scanf("%d",&t);
21     while(t--)
22     {
23         __int64 n;
24         scanf("%I64d",&n);
25         printf("%I64d\n",f(n-1)-1);
26     }
27
28 }
时间: 2024-08-29 07:01:36

求集合的非空子集中key的数量的相关文章

求集合元素的所有非空子集

现有一个包含N个元素的集合S,求集合S的所有子集? 例如:集合S包含三个元素{a, b, c},则它的所有子集为:{ }(空集), {a}, {b}, {c}, {a, b}, {a, c}, {b, c} 和{a, b, c}. 这里先用位操作的思路来求解,具体方法:用2进制Bit位来标记集合中的某个元素是否被选中,1代表选中,0代表未选中.例如集合{a, b, c}的所有子集可如下表示: {a}                       0 0 1 {b}                 

COJ 0483 800501求最大非空子矩阵

800501求最大非空子矩阵 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵.比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2-4 1 -4 1-1 8 0 -2 的最大子矩阵是 9 2-4 1-1 8 这个子矩阵的大小是15. 输入 输入是一个N * N的矩阵.输入的第一行给出N (0 < N <

两种求集合所有子集的方法

假设我们有一个求集合的全部子集(包含集合自身)的需求,即有一个集合s,包含两个元素 <a,b>,则其全部的子集为<a,ab,b>. 不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1. 本文分别讲述两种实现方法: 一:位图法: 1)构造一个和集合一样大小的数组A,分别与集合中的某个元素对应,数组A中的元素只有两种状态:"1"和"0",分别代表每次子集输出中集合中对应元素是否要输出,这样数组A可以看作是原集合的一个标记位图.

两种求集合全部子集的方法

如果我们有一个求集合的所有子集(包括集合自身)的需求,即有一个集合s,包括两个元素 <a,b>,则其所有的子集为<a,ab,b>. 不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1. 本文分别讲述两种实现方法: 一:位图法: 1)构造一个和集合一样大小的数组A,分别与集合中的某个元素相应,数组A中的元素仅仅有两种状态:"1"和"0",分别代表每次子集输出中集合中相应元素是否要输出.这样数组A能够看作是原集合的一个标记位图

【Leetcode】78. Subsets(求集合的子集问题)

78. Subsets(求集合的子集问题) [分析]:求集合的所有子集问题.题目要求子集中元素非递减序排列,因此我们先要对原来的集合进行排序.原集合中每一个元素在子集中有两种状态:要么存在.要么不存在.这样构造子集的过程中每个元素就有两种选择方法:选择.不选择,因此可以构造一颗二叉树,例如对于例子中给的集合[1,2,3],构造的二叉树如下(左子树表示选择该层处理的元素,右子树不选择),最后得到的叶子节点就是子集:{ 链接 } 1 class Solution 2 { 3 private: 4 v

C#泛型集合与非泛型集合_Felix(转自新浪博客)

在.NET FCL为我们提供了很多集合类型,是编程中非常有力的工具.泛型集合主要在System.Collections.Generic名称空间中,而非泛型集合主要在System.Collections,首先抛出结论:如果在C#2.0版本以上,尽量使用泛型集合类,而不使用非泛型集合类.因为,1.泛型编程是从c#2.0开始才被.net支持的.2.泛型集合在性能和类型安全方面优于非泛型集合. 非泛型集合-System.Collections名字空间中的类主要包括ArrayList, Hashtable

编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合

建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList(); al.Add(0); al.Add(1); al.Add("mike"); foreach (var item in al) { Console.WriteLine(item); } 上面这段代码充分演

hdu 1856 求集合里元素的个数 输出最大的个数是多少

求集合里元素的个数 输出最大的个数是多少 Sample Input41 23 45 61 641 23 45 67 8 Sample Output42 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <cmath> 6 # include <queue> 7 # define LL

(c++ 实现)山东科技大学 oj 求集合的交并补集(数据结构习题)

Problem A: 求集合的交并补集 Time Limit: 1 Sec  Memory Limit: 4 MBSubmit: 3663  Solved: 1041[Submit][Status][Web Board] Description 任意给定两个包含1-30000个元素的集合A,B(集合中元素类型为任意整型数,且严格递增排列),求A交B.A并B.A-B和B-A集合. Input 输入第一行为测试数据组数.每组测试数据两行,分别为集合A.B.每行第一个数n(1<=n<=30000)为