【2018.07.03NOIP模拟】T1 Problem A
Description
给一个包含 n 个正整数的集合,求这个集合的所有子集和的异或和。
Input
第一行,一个整数 n。
第二行,n 个正整数 a1~an。
Output 一个数表示答案。
Sample input
2
2 3
Sample output
4
Constraint
40% n<=20
80% n<=100
100% n<=1000,ai<=2000
Hint
0^2^3^(2+3)=4
BZOJ原题 叫做简单题
#include<bits/stdc++.h>
using namespace std;
#define N 2000010
bitset<N> s;
int ans=0,sum=0,x;
int main(){
int n;scanf("%d",&n);
s[0]=1;
for(int i=1;i<=n;i++){
scanf("%d",&x);
s^=(s<<x);
sum+=x;
}
for(int i=1;i<=sum;i++)if(s[i])ans^=i;
printf("%d",ans);
return 0;
}