BZOJ3687:bitset STL
题意:集合的子集的算术和的异或和
题解:bitset
二进制倒数第i位为1代表集合的和i出现过奇数次
例:1 2 3
初始: 000000001
<<1:000000010
异或: 000000011
<<2:000001100
异或: 000001111
<<3:001111000
异或: 001110111
#include<stdio.h> #include<bitset> using namespace std; int n,x,sum,ans; bitset<2000000> a; int main() { scanf("%d",&n); a[0]=1; while(n--) { scanf("%d",&x); sum+=x; a^=(a<<x); } for(int i=1;i<=sum;i++) if(a[i])ans^=i; printf("%d",ans); return 0; }
posted on 2016-10-26 18:01 2855669158 阅读(185) 评论(0) 编辑 收藏 举报