HDU 1564 Play a game && HDU 2147 kiki's game

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\n");
14         else
15             printf("ailyanlu\n");
16     }
17     return 0;
18 }
View Code

题意:

棋盘的尺寸是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!\n");
25 
26         }else{
27 
28             printf("What a pity!\n");
29 
30         }
31 
32     }
33 
34     return 0;
35 
36 }
View Code

猜你喜欢

转载自www.cnblogs.com/kongbursi-2292702937/p/11371503.html