您的位置:首页 > 其它

【bzoj3687】 简单题 bitset

2015-07-18 19:49 316 查看
用这道题学一下bitset,感觉没什么大用处其实就相当于一个布尔数组,可以快速左移右移,再就没大有别的用处了吧,不明觉厉。这道题f[i]表示和为i的集合个数为奇数还是偶数,f<<x表示f集合加上x后的集合,每次加入一个数,就用原集合异或一下这个集合就可以了。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<bitset>
#define maxn 2000010

using namespace std;

int n;
long long ans;
bitset<maxn> f;

int main()
{
	scanf("%d",&n);
	f[0]=1;
	for (int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		f=f^(f<<x);
	}
	for (int i=1;i<=2000000;i++)
	  if (f[i]) ans^=i;
	printf("%lld\n",ans);
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: