题意:求n个数构成的序列中所有子集的和的异或
解法:采用dp的办法把数一个一个放进去 然后上一次的集合变成加上这个数或者选择不加这个数 然后两个集合之间异或就可以了 最后把得到的所有集合再进行异或 这题用bitset优化下简直短的可怕
昨天的模拟里面没做出reginal 的异或题 真是太惭愧了
#include<bitset>
#include<cstdio>
using namespace std;
bitset<2222222>bit;
int main(){
int n,x,sum=0,ans=0;
scanf("%d",&n);
bit[0]=1;
while(n--){
scanf("%d",&x);
sum+=x;
bit=bit^(bit<<x);
}
for(int i=1;i<=sum;++i)
if(bit[i])ans^=i;
printf("%d\n",ans);
return 0;
}