Description 小明和小紅經常玩一個博弈游戲。給定一個n×n的棋盤,一個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格子之前不能被訪問過。誰不能移動石頭了就算輸。假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰 ...
Submit: 3110 Solved: 2250
[Submit][Status][Discuss]
Description
小明和小紅經常玩一個博弈游戲。給定一個n×n的棋盤,一個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格子之前不能被訪問過。誰不能移動石頭了就算輸。假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰能贏?Input
輸入文件有多組數據。 輸入第一行包含一個整數n,表示棋盤的規模。 當輸入n為0時,表示輸入結束。
Output
對於每組數據,如果小明最後能贏,則輸出”Alice”, 否則輸出”Bob”, 每一組答案獨占一行。
Sample Input
20
Sample Output
AliceHINT
對於所有的數據,保證1<=n<=10000。
Source
第三遍做這道題了233 結論都快背過了。 直接判斷奇偶性即可#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int MAXN=1e5+10,mod=10007; inline char nc() { static char buf[MAXN],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin)),p1==p2?EOF:*p1++; } inline int read() { char c=nc();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=nc();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=nc();} return x*f; } int a[MAXN]; int main() { #ifdef WIN32 freopen("a.in","r",stdin); #else #endif int N; while(1) { N=read(); if(N==0) break; if(N&1) printf("Bob\n"); else printf("Alice\n"); } return 0; }