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

Posted kongbursi-2292702937

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于HDU 1564 Play a game && HDU 2147 kiki's game的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1564 Play a game(博弈找规律)

hdu4597 Play Game(DFS)

[HDU 4597] Play Game

HDU 4597 Play Game

HDU - 4597 Play Game (博弈dp)

hdu 4597 Play Game(记忆化搜索)