kiki's game
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/10000 K (Java/Others)
Total Submission(s): 16342 Accepted Submission(s): 10009
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?
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.
5 3
5 4
6 6
0 0
What a pity!
Wonderful!
Wonderful!
【题意】
一个棋盘游戏。棋盘的大小是 n*m。首先,一枚硬币放在右上角(1,m)。每次一个人可以把硬币移到左边,下面或左下方的空白处。不能行动的人将会输掉这场比赛。琪琪和 ZZ 一起玩。游戏总是从琪琪开始。如果双方都打得很好,谁会赢这场比赛?
【分析】
先画 P/N 图:(P:必败点;N:必胜点(先手))
m \ n | 1 | 2 | 3 | 4 | 5 |
1 | P | N | P | N | P |
2 | N | N | N | N | N |
3 | P | N | P | N | P |
4 | N | N | N | N | N |
5 | P | N | P | N | P |
很容易看出,当 n 和 m 都为奇数时,先手必败;当 n 和 m 中有一个数为偶数时,先手必胜。
【AC代码】
#include<cstdio>
int main(){
int n, m;
while((scanf("%d%d", &n, &m)) && (n!=0 && m!=0)){
if((n&1) && (m&1)) printf("What a pity!\n");
else printf("Wonderful!\n");
}
return 0;
}