[bzoj3687]簡單題

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…

發佈了31 篇原創文章 · 獲贊 13 · 訪問量 7286
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章