so easy
Accepts: 512
Submissions: 1601
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
已知一个包含 nn 个元素的正整数集合 SS,设 f(S)f(S) 为集合 SS 中所有元素的异或(XOR)的结果。
如:S = {1, 2, 3}S={1,2,3}, 则 f(S) = 0f(S)=0。
给出集合 SS,你需要计算 将所有 f(s)f(s) 进行异或后的值, 这里 s subseteq Ss⊆S.
输入描述
多组测试数据。第一行包含一个整数 T(Tleq 20)T(T≤20) 表示组数。
每组测试数据第一行包含一个数 n(1≤n≤1,000) 表示集合的大小,第二行为 nn 的数表示集合元素。第 i(1≤i≤n) 个数 0≤ai≤1000,000,000 且数据保证所给集合中没有重复元素。
输出描述
对于每组测试数据,输出一个数,表示将所有的 f(s)f(s) 的异或之后的值。
输入样例
1 3 1 2 3
输出样例
0
Hint
样例中,S = {1, 2, 3}S={1,2,3}, 它的子集有varnothing∅, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}
/* 5650 so easy 首先尝试了一下奇偶是否有区别,然后发现只要是>1的全为0 - - 然后对n==1进行特判即可 hhh-2016-03-26 22:03:46 */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <functional> using namespace std; #define lson (i<<1) #define rson ((i<<1)|1) typedef long long ll; const int maxn = 20050; int a[maxn]; int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i = 1;i <= n;i++) scanf("%d",&a[i]); if(n == 1) printf("%d ",a[1]); else printf("0 "); } return 0; }