BZOJ 3687: 简单题 动态规划+bitset

数字很多,但是由于总和不超过 $2 imes 10^6$,所以最多只能凑出来 $2 imes 10^6$ 种算术和.  

由于这里是对算是和取异或,所以我们只需关注每种算术和出现次数的奇偶.   

由于奇奇 $Rightarrow$ 偶,奇偶 $Rightarrow$ 奇,偶偶 $Rightarrow$ 偶,所以直接用 bitset 来加速就好了

#include <cstdio>
#include <bitset> 
#include <algorithm>
#define N 2000007 
#define ll long long 
#define setIO(s) freopen(s".in","r",stdin)  
using namespace std;
bitset<N>f;  
int main() 
{   
    // setIO("input");
    int i,j,m=0,n,x;  
    f[0]=1;   
    scanf("%d",&n); 
    for(i=1;i<=n;++i) scanf("%d",&x),f^=(f<<x),m+=x;  
    int ans=0;
    for(i=1;i<=m;++i) if(f[i]) ans^=i; 
    printf("%d
",ans); 
    return 0; 
}

  

原文地址:https://www.cnblogs.com/guangheli/p/12142410.html