您的位置:首页 > 其它

HDOJ 题目2955 kiki's game(博弈)

2014-08-01 16:46 435 查看

kiki's game

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/1000 K (Java/Others)

Total Submission(s): 6501    Accepted Submission(s): 3866


[align=left]Problem Description[/align]
Recently kiki has nothing to do. While she is bored, an idea appears in his mind, she just playes the checkerboard game.The size of the chesserboard is n*m.First of all, a coin is placed in the top right corner(1,m). Each time one
people can move the coin into the left, the underneath or the left-underneath blank space.The person who can't make a move will lose the game. kiki plays it with ZZ.The game always starts with kiki. If both play perfectly, who will win the game?

 

[align=left]Input[/align]
Input contains multiple test cases. Each line contains two integer n, m (0<n,m<=2000). The input is terminated when n=0 and m=0.

 

[align=left]Output[/align]
If kiki wins the game printf "Wonderful!", else "What a pity!".

 

[align=left]Sample Input[/align]

5 3
5 4
6 6
0 0

 

[align=left]Sample Output[/align]

What a pity!
Wonderful!
Wonderful!

 

[align=left]Author[/align]
月野兔
 

[align=left]Source[/align]
HDU 2007-11 Programming Contest

 

题目大意:一个硬币放在棋盘的最右上角,每一次可以向左或向下或左下移动,kiki和他的一个小伙伴玩,kiki先移,看谁能赢

题目分析:博弈题,我感觉都是有规律可寻的,第一步先找他的必败点,标记为p即右下角,第二部把能通向必败点的标记为必胜点n,第三步,把只能通往必胜点的地方标记为必败点p,否则标记为必胜点n,标完,大概如图所示

 



很容易看出规律;

ac代码

#include<stdio.h>
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF,n||m)
{
if(n%2==0)
printf("Wonderful!\n");
else
{
if(m%2)
printf("What a pity!\n");
else
printf("Wonderful!\n");
}
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: