标签:reg print nim游戏 ++ ring algorithm namespace cstring pac
Nim游戏的结论就是先手异或和不为0的时候必胜,所以留下线性基就行了。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define R register
int n;
int a[1000];
inline bool cmp(int x,int y) { return x>y; }
int cnt,p[40];
inline int ins(int x) {
for(R int i=31;i>=0;i--)
if(x&(1<<i)) {
if(!p[i]) { p[i]=x; return 1;}
else x^=p[i];
}
return 0;
}
int main() {
scanf("%d",&n);
for(R int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n,cmp);
long long ans=0;
for(R int i=1;i<=n;i++) if(!ins(a[i])) ans+=a[i];
printf("%lld\n",ans);
return 0;
}
标签:reg print nim游戏 ++ ring algorithm namespace cstring pac
原文地址:https://www.cnblogs.com/HN-wrp/p/12812983.html