因为sum<=1e6,考虑对于每个数值记录出现次数
发现出现次数的奇偶性才会影响对答案的贡献,于是存01就好
每次新加一个数x,显然有更新: for(int i=x;i<=1e6;++i) f[i]^=f[i-x];
既然存01,就用bitset了
bitset的左移右移很方便啊2333
对了……这题……数据有毒,没给够n个数,顺手读入优化RE了一年2333
#include<bits/stdc++.h>
#define MAXN 2000005
using namespace std; int n,read_x;
inline int read(){
char ch = getchar();
int rtn = 0;
while(!isdigit(ch)) ch = getchar();
while(isdigit(ch)) rtn = rtn*10 + ch -'0' , ch = getchar();
return rtn;
}
int sum = 0;
bitset<MAXN> a;
int main(){
n = read();
a[0] = 1;
for(int i=1;i<=n;++i){
// read_x = read();
scanf("%d",&read_x);
sum += read_x;
a ^= a<<read_x;
}
int ans = 0;
for(int i=1;i<=sum;++i)
if(a[i]) ans ^= i;
printf("%d",ans);
return 0;
}