hdu 3389 Game 阶梯博弈
来源:互联网 发布:扫雷辅助软件 编辑:程序博客网 时间:2024/04/28 02:21
#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <queue>#include <iostream>#include <algorithm>using namespace std;#define LL __int64const 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函数值,异或下酒是结果了*/