首页 > 其他 > 详细

「bzoj3687: 简单题」

时间:2019-02-11 16:43:06      阅读:295      评论:0      收藏:0      [点我收藏+]

题目

发现需要一个\(O(n\sum a_i )\)的做法

于是可以直接做一个背包,\(dp[i]\)表示和为\(i\)的子集是否有奇数种

\(bitset\)优化一下就好了

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<bitset>
#define maxn
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
    char c=getchar();int x=0;while(c<‘0‘||c>‘9‘) c=getchar();
    while(c>=‘0‘&&c<=‘9‘) x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
std::bitset<2000005> dp; 
int n,s,ans,a;
int main()
{
    n=read();
    for(re int i=1;i<=n;i++) scanf("%d",&a),dp[0]=1,dp=dp^(dp<<a),s+=a;
    for(re int i=1;i<=s;i++) if(dp[i]) ans^=i;
    printf("%d\n",ans);
    return 0;
}

「bzoj3687: 简单题」

原文:https://www.cnblogs.com/asuldb/p/10362178.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!