1. 程式人生 > >BZOJ 3687: 簡單題 bitset

BZOJ 3687: 簡單題 bitset

OS return EDA %d com 開始 for IT bit

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

2

1 3

Sample Output

6

HINT

【樣例解釋】

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 int
MAXS = 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 }
View Code

BZOJ 3687: 簡單題 bitset