洛谷P4136 谁能赢呢?

2018-02-20 19:38:30来源:cnblogs.com作者:自为风月马前卒人点击

分享

题目描述

小明和小红经常玩一个博弈游戏。给定一个n×n的棋盘,一个石头被放在棋盘的左上角。他们轮流移动石头。每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问过。谁不能移动石头了就算输。

假如小明先移动石头,而且两个选手都以最优策略走步,问最后谁能赢?

输入输出格式

输入格式:

输入文件有多组数据。

输入第一行包含一个整数n,表示棋盘的规模。

当输入n为0时,表示输入结束。

输出格式:

对于每组数据,如果小明最后能赢,则输出Alice, 否则输出Bob, 每一组答案独占一行。

输入输出样例

输入样例#1: 复制
20
输出样例#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;}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台