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  阅读(186)  评论(0编辑  收藏  举报

导航