偶然碰到了一下,顺便学习一波bitset。。
感觉这东西就像一个布尔数组,可以位运算,极大减小常数(1/32)
这道题目的话,我们先列出一般方程式子。
f[i]^=f[i-x]
然后为了不每次都更新而导致n^2,我们用bitset。。f^=(f shl x);
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bitset>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define inf 0x3f3f3f3f
using namespace std;
const int N=2e6+5;
int n;
typedef long long ll;
ll ans;
bitset<N> f;
int main()
{
scanf("%d",&n);
f[0]=1;
fo(i,1,n)
{
int x;
scanf("%d",&x);
f=f^(f<<x);
}
fo(i,1,2000000)if (f[i])ans^=i;
printf("%lld\n",ans);
return 0;
}