#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL __int64
const int maxn=1010;
int main()
{
int T,tt=0;
cin>>T;
while(T--)
{
int i,j,k,n,ans=0,a;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a;
if(i%6==0||i%6==2||i%6==5)ans^=a;
}
cout<<"Case "<<++tt<<": ";
if(ans)cout<<"Alice"<<endl;
else cout<<"Bob"<<endl;
}
return 0;
}
/*
阶梯博弈,SG定理
以下取余是对6取余。
由题意可知,可分三个子游戏:
1.余0的箱子中的卡只能移到余3里,余3的箱子只能移到余0里。最终箱子编号为3;
2.余2的箱子中的卡只能移到余1里,余1的箱子只能移到余2里。最终箱子编号为1;
3.余4的箱子中的卡只能移到余5里,余5的箱子只能移到余4里。最终箱子编号为4;
对于1子游戏,若一个人从余3移一定数目的卡到余0的a箱里,那另一个也必定可以从a箱中移出相同数目的卡。所以
我们只用考虑从余0中移出的情况(因为余0中移到3号箱中,另一个就不能从3号箱子移出卡,不能与上述判断等同),
而从余0中移到余3中可以看做从余0中删除,因为余数3的可以根据上述方式最终移动3中,而先后手顺序不变。
这就变成了取石子游戏了,sg[i]=i。
其余的2,3同理。最终求得的sg函数值,异或下酒是结果了
*/
hdu 3389 Game 阶梯博弈
最新推荐文章于 2020-02-25 20:45:40 发布