题意
给定一个正整数集,求所有子集算术和的异或和
题解
每次加入一个元素x,用原集合a xor (a<< x) 然后每一个值统计一下
bitset看起来很优越,是一个能位运算的布尔数组
#include<bitset> #include<stdio.h> int n,sum,ans; using namespace std; bitset<2000000>a; int main(){ scanf("%d",&n); a[0]=1; for(int i=1;i<=n;i++){ int x;scanf("%d",&x); a=a^(a<<x); } for(int i=1;i<=2000000;i++)if(a[i])ans^=i; printf("%d",ans); }