BZOJ 2463 谁能赢呢?[博弈论]

来源:互联网 发布:编程语言能用中文 编辑:程序博客网 时间:2024/06/05 08:47

传送门
超级大水题。。。2分钟想清楚,30sec打完。。
首先对于n是偶数,一定能被1*2的骨牌覆盖!所以从起点开始,先手一定走的是骨牌的另一端,后手一定走的是骨牌的前一端,因此无论何时,先手总是可以走。因此先手必胜。

如果n是奇数,那么去掉一格后一定能被1*2的骨牌覆盖,但是先手从左上角走,就进入了这个S态(必胜态),那么和上边的分析一样了,因此先手必败。

#include <cstdio>#include <iostream>using namespace std;int n;int main(){    while(cin>>n){        if(n==0)break;        if(n&1)cout<<"Bob"<<endl;        else cout<<"Alice"<<endl;    }    return 0;}