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函数值,异或下酒是结果了*/

原创粉丝点击