记录编号 151424 评测结果 AAAAAAAAAA
题目名称 [CQOI2013]新Nim游戏 最终得分 100
用户昵称 Gravatar天一阁 是否通过 通过
代码语言 C++ 运行时间 0.010 s
提交时间 2015-03-05 21:34:12 内存使用 0.36 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> 

#define Maxn 110

using namespace std;

int n,a[Maxn],c[Maxn],tot=0;
int g[Maxn][Maxn];

bool check(int x){
	if(!tot&&x) return 0;
	memset(g,0,sizeof(g));
	int N=tot+1;
	for(int i=1;i<=30;i++){
		for(int j=1;j<=tot;j++) g[i][j]=(c[j]>>(i-1))&1;
		g[i][N]=(x>>(i-1))&1;
	}
	/*for(int i=1;i<=30;i++){
		for(int j=1;j<=N;j++) cout<<g[i][j]<<' ';
		cout<<endl;
	}
	cout<<endl;*/
	for(int p=1,lim=min(30,N);p<=lim;p++){
		int t=0;
		for(int i=p;i<=30;i++) if(g[i][p]) t=i;
		if(!t) continue;
		for(int i=1;i<=N;i++) swap(g[t][i],g[p][i]);
		for(int i=1;i<=30;i++){
			if(i!=p && g[i][p])
				for(int j=1;j<=N;j++) g[i][j]^=g[p][j];
		}
	}
	for(int i=1,lim=min(30,N);i<=lim;i++)
		if(g[i][i]==0&&g[i][N]) return 0;
	for(int i=N;i<=30;i++) if(g[i][N]!=0) return 0;
	return 1;
}

int main(){
	freopen("newnim.in","r",stdin);
	freopen("newnim.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	long long ans=0;
	for(int i=n;i>=1;i--){
		if(check(a[i])) ans+=(long long)a[i];
		else c[++tot]=a[i];
	}
	printf("%lld\n",ans);
}
/*
20
61 53 35 59 68 51 23 97 70 11 99 92 60 63 28 59 98 64 82 50
*/