http://acm.hdu.edu.cn/showproblem.php?pid=2147
题意:n×m的棋盘,每次可以向左走、向下走、向左下走,初始在(1, m),n,m<=2000,问先手是否胜利。
#include <cstdio>
using namespace std;
int main() {
int n, m;
while(scanf("%d%d", &n, &m), n|m) (n&1)&&(m&1)?puts("What a pity!"):puts("Wonderful!");
return 0;
}
妈呀= =让我想起了cf某题...
可是这题和那题不同= =
通过找规律....发现n和m只要有1个是偶数就是必胜的= =
证明如下:
当n为偶数时,可以向下走,转换成n和m都是奇数的必败局面
当m为偶数时,同上
当n和m都是时,向左下走也同上了。
当n和m都是奇数时,显然无论怎么走,都是走到一个n或m为偶数或者n和m都是偶数的局面,即必胜局面