题意:

  给一个有n*m 个格子的棋盘,将一个硬币放在右上角一格,每次可以往左/下/左下移动一格,碰到不能移动的局面者输。

思路:

  找P/N状态。先将(n,1)归为P状态,那么能一步到达此位置的有3个位置,分别是其上/右/右上的格子。根据这个规律来找,在整个棋盘的格子上标上P和N。可以发现,棋盘上是有规律的,若提供的n和m皆为奇数,则先手输;否则先手赢。

 #include <iostream>
#include <cstdio>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
int a, b;
while(cin>>a>>b)
{
if(!a&&!b) break;
if( a& && b& ) printf("What a pity!\n");
else printf("Wonderful!\n");
}
return ;
}

AC代码

05-11 20:14