您的位置:首页 > 其它

5650 so easy

2016-03-26 22:07 211 查看


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(T\leq 20)T(T≤20) 表示组数。

每组测试数据第一行包含一个数 n(1\leq n \leq 1,000)n(1≤n≤1,000) 表示集合的大小,第二行为 nn 的数表示集合元素。第 i(1\leq i \leq n)i(1≤i≤n) 个数 0 \leq a_i \leq 1000,000,0000≤a​i​​≤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\n",a[1]);
else
printf("0\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: