【HDU5650 BestCoder Round 77 (div2) A】【水题】so easy 集合所有子集异或和的异或和

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 SsS.
输入描述
多组测试数据。第一行包含一个整数 T(T\leq 20)T(T20) 表示组数。

每组测试数据第一行包含一个数 n(1\leq n \leq 1,000)n(1n1,000) 表示集合的大小,第二行为 nn 的数表示集合元素。第 i(1\leq i \leq n)i(1in) 个数 0 \leq a_i \leq 1000,000,0000ai1000,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}

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b>a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b<a)a = b; }
const int N = 0, M = 0, Z = 1e9 + 7, ms63 = 0x3f3f3f3f;
int casenum, casei;
int n, x, ans;
int main()
{
	scanf("%d", &casenum);
	for (casei = 1; casei <= casenum; ++casei)
	{
		scanf("%d", &n);
		if (n == 1)
		{
			scanf("%d", &ans);
			printf("%d\n", ans);
		}
		else
		{
			for (int i = 1; i <= n; ++i)scanf("%*d");
			puts("0");
		}
	}
	return 0;
}
/*
【题意】
给你一个含有n(1000)个元素的正整数集合S
问你这个集合所有子集的异或值。

【类型】
水题

【分析】
每个元素会被选择2^(n-1)次,如果n为1,只会被选择1次,否则会被选择偶数次

【时间复杂度&&优化】
O(n)

*/


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值