给定n堆石子,双方轮流游戏,可以任取一堆的任意个,谁拿走最后一个谁输,A先手。
Nim博弈跑完发现如果都是1的结果刚好不对...
纯1的情况只能通过有多少堆来判断....
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000007
#define inf 0x3f3f3f3f
#define N 100100
int main()
{
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{
int n,ans=0,f=0,x;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
ans=ans^x;
if(x>1)
f=1;
}
if(f==0)
{
if(n%2)
printf("Case %d: Bob\n",cas);
else
printf("Case %d: Alice\n",cas);
}
else
{
if(ans==0)
printf("Case %d: Bob\n",cas);
else
printf("Case %d: Alice\n",cas);
}
}
return 0;
}