E - kiki's game

这天WC感觉很无聊(他昨天通宵把所有的新番都补完了)。忽然间,他灵光一闪,想出了一个“令人窒息”的棋盘游戏。游戏规则是这样的:给出一个n*m的棋盘,开始有一颗棋子在(1,m)处,两名玩家轮流操作,每次可以将棋子移动一格到棋子的左侧,下方或者左下方,当轮到某个人无法再移动棋子时,则这个人将输掉比赛。WC靠着这个“令人窒息”棋局一天之间虐了几十个人,后来他聪明的室友终于戳穿了WC的伎俩,原来WC每次只要知道棋盘的规模(n和m),就可以知道最后谁会获胜(假设WC和对手都足够聪明,每次做出的都是最优选择),所以一旦发现自己将会输掉,就借口换个棋盘保证他将会赢。请问你知道WC是怎么做到的吗? 

Input

输入包含多组数据,每组数据都包含两个整数 n, m (0<n,m<=2000). 当n和m都为0时,结束输入。 
 

Output

如果WC会赢就输出"Wonderful!", 否则输出"What a pity!". 

Sample Input

5 3
5 4
6 6
0 0

Sample Output

What a pity!
Wonderful!
Wonderful!

HDU 2007-11 Programming Contest

 

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2147

 

 

百度搜索HDU 巴什博弈出来的题目。。

不知道 巴什博弈,可以戳→http://blog.csdn.net/lttree/article/details/24832747

该题目题意:

给你n*m表格,初始在右上角,每次在上个人移动后的基础上移动一步(向左or向下or向左下)

先到左下角则获胜。

Kiki这个孩纸先走,ZZ后走。

问Kiki是否能赢!

这俩熊孩子,非要玩这种游戏么,耗脑细胞= =。

 

这题解法,通过建立PN表格,就一目了然。

博弈么,从左下角往前推:

P→到达该点后,下一个人必败。

N→到达该点后,下一个人必胜。

显然,最左下角的点是P

       
       
       
       
       
       
P      

这是7*7的表格,如图1,7位置为P。

由于1,6和2,7位置只能向1,7位置移动,所以1,6与2,7为N。

       
       
       
       
       
N      
PN     

 

同理,第1列和第7行就可以填充完毕。

P      
N      
P      
N      
P      
N      
PNPNPNP

再反观2,6位置,作为2,6位置上的人,想赢得这场比赛,所以肯定会向1,7移动,因此2,6也是N

P      
N      
P      
N      
P      
NN     
PNPNPNP

每个位置上,都会向赢比赛的趋向走,所以剩余各个点的P、N都可以填充完毕

PNPNPNP
NNNNNNN
PNPNPNP
NNNNNNN
PNPNPNP
NNNNNNN
PNPNPNP


此图填完,可以找到规律:

只有在行列数均为奇数时,为P,其他情况均为N。

 

所以此题:若行列均为奇数则Kiki无法赢得比赛。

#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{

    int flas=0;
    if(n==0&&m==0)break;
    if(n%2==0||m%2==0)
    {

        flas=1;
    }
if(flas==0)printf("What a pity!\n");
else printf("Wonderful!\n");
}
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值