HDU 1564 Play a game题意:
棋盘的大小是n*n。一块石头被放在一个角落的广场上。他们交替进行,8600人先走。每次,玩家可以将石头水平或垂直移动到一个未访问的邻居广场。谁不采取行动,谁就会输掉这场比赛。如果双方都打得很好,谁将赢得比赛?
题解:
三角形代表起始位置,虽然不是右上角但是解题都差不多
如果n为偶数,那么所有格子可以被2*1的砖块覆盖掉。
这样先手每次都移动到当前1*2的另外一块。先手必赢。
如果n为奇数。出了起始那个店,其余点都可以被覆盖。
代码:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #define MAXN 5005 6 using namespace std; 7 int main() 8 { 9 int n; 10 while(~scanf("%d",&n)&&n) 11 { 12 if(n%2==0) 13 printf("8600 "); 14 else 15 printf("ailyanlu "); 16 } 17 return 0; 18 }
题意:
棋盘的尺寸是n*m。首先,把一枚硬币放在右上角(1,m)。每次一个人可以把硬币移到左边,下面或者左边下面的空格里。不能采取行动的人将会输掉比赛。
先手赢了打印出Wonderful!,输了打印另一个
题解:
打个表就可以看出来,长或者宽只要有一个为偶数,那么就必胜
1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #include <cstring> 6 7 #include <algorithm> 8 9 10 11 using namespace std; 12 13 14 15 int main(){ 16 int n,m; 17 18 while(scanf("%d %d",&n,&m)!=EOF){ 19 20 if(n==0 && m==0)break; 21 22 if(n%2==0 || m%2==0){ 23 24 printf("Wonderful! "); 25 26 }else{ 27 28 printf("What a pity! "); 29 30 } 31 32 } 33 34 return 0; 35 36 }