题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2147
题目大意:给你一个n*m的棋盘,初始位置为(1,m),两人轮流操作,每次只能向下,左,左下这三个方向移动,谁最后无法移动棋子就输掉比赛,问先手是否会获胜。
解题思路:简单题,P/N分析找规律,以(n,m)点为结束点推到起始点,如图:
发现每个田字格的状态都是一样的,因为(n,m)点一定时P态,所以可以得出规律:只有当(m%2==1&&n%2==1)时,先手才会输。
代码:
1 #include<cstdio> 2 3 int main(){ 4 int n,m; 5 while(~scanf("%d%d",&m,&n)&&(m||n)){ 6 if(m%2==1&&n%2==1) 7 puts("What a pity!"); 8 else 9 puts("Wonderful!"); 10 } 11 }