打表找规律得到
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn],f[maxn];
int n;
int sg(int x,int deep)
{
if(x==0) return deep+3;
if(x%4)
{
if(x%4==2) return deep;
else return deep-1;
}
return sg(x/4,deep+1);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
memset(f,-1,sizeof(f));
cin>>n;
int res=0;
for(int i=1;i<=n;i++)
{
int x;cin>>x;
res^=sg(x,1);
}
if(res) cout<<"Win"<<endl;
else cout<<"Lose"<<endl;
return 0;
}
别人的代码:
_builtin_ctz(x)是求出x二进制下末尾0的个数
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
inline int sg(int x)
{
return __builtin_ctz(x);
}
int main(void)
{
int n; cin>>n;
int ans = 0;
while(n--)
{
int x; cin>>x;
ans ^= sg(x);
}
if(!ans) puts("Lose");
else puts("Win");
return 0;
}