BZOJ 3687: 簡單題 bitset
阿新 • • 發佈:2018-05-26
OS return EDA %d com 開始 for IT bit
[Submit][Status][Discuss]
1 3
3687: 簡單題
Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss]
Description
小呆開始研究集合論了,他提出了關於一個數集四個問題:
1.子集的異或和的算術和。
2.子集的異或和的異或和。
3.子集的算術和的算術和。
4.子集的算術和的異或和。
目前為止,小呆已經解決了前三個問題,還剩下最後一個問題還沒有解決,他決定把
這個問題交給你,未來的集訓隊隊員來實現。
Input
第一行,一個整數n。
第二行,n個正整數,表示01,a2….,。
Output
一行,包含一個整數,表示所有子集和的異或和。
Sample Input
21 3
Sample Output
6HINT
【樣例解釋】
6=1 異或 3 異或 (1+3)
【數據規模與約定】
ai >0,1<n<1000,∑ai≤2000000。
另外,不保證集合中的數滿足互異性,即有可能出現Ai= Aj且i不等於J
Source
題目鏈接 bitset+背包dp *用讀優過不去後來換了scanf才過1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 const int MAXN = 1100; 6 const intView CodeMAXS = 2100000; 7 bitset<MAXS> s; 8 int n; 9 10 int main() { 11 scanf("%d", &n); 12 s.set(0); 13 for (int i = 1; i <= n; ++i) { 14 int x; 15 scanf("%d", &x); 16 s ^= (s << x); 17 } 18 long long ans = 0; 19 for (int i = 0; i < MAXS; ++i) {20 if (s[i]) { 21 ans ^= (long long)i; 22 } 23 } 24 cout << ans << "\n"; 25 return 0; 26 }
BZOJ 3687: 簡單題 bitset