[bzoj2463]谁能赢呢?
好神啊。。
将一堆1*2的骨牌放到这个n*n的棋盘上,可以发现如果骨牌正好放满的话先手一定会胜利的,因为先手每一次都将棋子从骨牌的一个开始处推到结束处,那么由于骨牌正好放满,也就是说推完最后一步后没有骨牌了。(如果骨牌恰巧放满,那么n就是偶数)
反之,如果不能放满骨牌,那么先手一定是将骨牌从一个单块推到了一个骨牌的开始处,之后后手的人就成了上一种情况的先手,也就是后手必胜了。
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <map> 7 #include <string> 8 #include <vector> 9 #include <stack> 10 #include <cmath> 11 #include <queue> 12 using namespace std; 13 14 int main(){ 15 int n; 16 while(scanf("%d",&n)==1&&n)if(n&1)puts("Bob");else puts("Alice"); 17 }