新NIM游戏

表示并不会做这道题,

#include<cstdio>
#include<algorithm>
using namespace std;

typedef long long ll;

ll a[10000];
ll p[10000];

bool cmp(ll x,ll y){
 return x>y;
}

int main(){
    int n;
    scanf("%d",&n);
    for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
    ll ans=0,tot=0;
    sort(a+1,a+1+n,cmp);
    for (int i=1;i<=n;i++) tot+=a[i];
    for (int i=1;i<=n;i++){
        ll t=a[i];
        for (int j=30;j>=0;j--){
            if(1&(t>>j)) {
                if(!p[j]) {p[j]=t;break;}
                else t^=p[j];
            }
        }
        if(t) ans+=a[i];
    }
    if(ans!=0) printf("%lld
",tot-ans);
    else printf("-1
");
return 0;
}
原文地址:https://www.cnblogs.com/lmjer/p/9318882.html