http://www.lydsy.com/JudgeOnline/problem.php?id=3687
首先,對於每個和如果出現次數超過1,只會產生0次或1次的貢獻,因爲x^x=0…
所以只需記出現次數and 1…
f[i]表示和爲i的集合出現次數and 1..
對於每個新的數x都會使f[i+x]^=f[i].
所以用bitset會比較優越
Orz w_yqts
#include <bits/stdc++.h>
using namespace std;
bitset <2000000> f;
int n,m,ans,x;
int main()
{
f[0]=1;
cin>>n;
while (n--)
{
scanf("%d",&x);
m+=x;
f^=f<<x;
}
for (int i=1;i<=m;++i) ans^=i*f[i];
cout<<ans<<endl;
}
代碼參照hzwer…