1. 程式人生 > >洛谷P4136 誰能贏呢?

洛谷P4136 誰能贏呢?

bre char 記得 stat str 輸入輸出 using 最優 輸入輸出格式

題目描述

小明和小紅經常玩一個博弈遊戲。給定一個n×n的棋盤,一個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格子之前不能被訪問過。誰不能移動石頭了就算輸。

假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰能贏?

輸入輸出格式

輸入格式:

輸入文件有多組數據。

輸入第一行包含一個整數n,表示棋盤的規模。

當輸入n為0時,表示輸入結束。

輸出格式:

對於每組數據,如果小明最後能贏,則輸出Alice, 否則輸出Bob, 每一組答案獨占一行。

輸入輸出樣例

輸入樣例#1: 復制
2
0
輸出樣例#1: 復制
Alice

說明

對於20%的數據,保證1<=n<=10;

對於40%的數據,保證1<=n<=1000;

對於所有的數據,保證1<=n<=10000。

貌似是清北刷題班的原題,我記得當時在考場上還做出來了23333

就是找規律,沒啥好說的

#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; }

洛谷P4136 誰能贏呢?