【2018.07.03NOIP模拟】T1 Problem A 【bitset】

【2018.07.03NOIP模拟】T1 Problem A

Description

给一个包含 n 个正整数的集合,求这个集合的所有子集和的异或和。

Input

第一行,一个整数 n。
第二行,n 个正整数 a1~an。
Output 一个数表示答案。

Sample input

2
2 3

Sample output

4

Constraint

40% n<=20
80% n<=100
100% n<=1000,ai<=2000

Hint

0^2^3^(2+3)=4


BZOJ原题 叫做简单题


#include<bits/stdc++.h>
using namespace std;
#define N 2000010
bitset<N> s;
int ans=0,sum=0,x;
int main(){
    int n;scanf("%d",&n);
    s[0]=1;
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        s^=(s<<x);
        sum+=x;
    }
    for(int i=1;i<=sum;i++)if(s[i])ans^=i;
    printf("%d",ans);
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/dream_maker_yk/article/details/80900161