解題思路:
初學bitset,不明覺厲。bitset相當于一個布爾數組,可以快速左移右移。
注意到一個和隻有出現奇數次才有用,是以我們用f[i]表示和為i的集合個數為奇數還是偶數。用bitset維護f數組,那麼f << <script type="math/tex" id="MathJax-Element-1"><<</script>x表示f集合加上x後的集合,但枚舉x時可以不取,是以再用原集合異或一下這個集合就得到了現在的f數組。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<bitset>
#define ll long long
using namespace std;
const int N=;
bitset<N>f;
int main()
{
//freopen("lx.in","r",stdin);
int n,x,ans=;
scanf("%d",&n);
f[]=;
while(n--)
{
scanf("%d",&x);
f^=(f<<x);
}
for(int i=;i<;i++)
if(f[i])ans^=i;
cout<<ans<<'\n';
return ;
}