hdu3951-(Coin Game)
hdu3951-(Coin Game)
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3951
題目描述:
After hh has learned how to play Nim game, he begins to try another coin game which seems much easier.
The game goes like this:
Two players start the game with a circle of n coins.
They take coins from the circle in turn and every time they could take 1~K continuous coins.
(imagining that ten coins numbered from 1 to 10 and K equal to 3, since 1 and 10 are continuous, you could take away the continuous 10 , 1 , 2 , but if 2 was taken away, you couldn’t take 1, 3, 4, because 1 and 3 aren’t continuous)
The player who takes the last coin wins the game.
Suppose that those two players always take the best moves and never make mistakes.
Your job is to find out who will definitely win the game.
Input
The first line is a number T(1<=T<=100), represents the number of case. The next T blocks follow each indicates a case.
Each case contains two integers N(3<=N<=109,1<=K<=10).
Output
For each case, output the number of case and the winner “first” or “second”.(as shown in the sample output)
Sample Input
2
3 1
3 2
Sample Output
Case 1: first
Case 2: second
題意理解:就是講一個取硬幣的游戲,將給的N個硬幣圍成一圈,兩個人分別
次最多取K個硬幣,最少1個硬幣。但是,如下圖,如果第5個硬幣被取走,那么下一個人就不能取4,6這兩個硬幣。每次取的硬幣必須是連續的。最后取完的那個人獲勝。
解題思路:
第一個人取了之后,將剩下的硬幣展開成直線排列,取這條線對稱位置的硬幣,如果能取到,這后手必勝。因為從第三次開始,往后每一次無論先手怎么取,我們都只需要取他對稱的位置,就能保證必勝,否則必敗。但其實在深入一點思考就會發現,其實只有當k=1時,而且剛好該后手時剩下偶數個硬幣,后手必敗。其余情況后手都能取到對稱點
AC代碼:
#include<cstdio> int main() {int Count = 0;int t;int m, n;scanf("%d", &t);while(t--){Count++;scanf("%d%d", &m ,&n);if((n == 1 && (m % 2 == 1)) || m <=n)//只有當k = 1并且一共為奇數個硬幣 和 先手第一次就能取完這兩種情況先手能贏。printf("Case %d: first\n", Count);elseprintf("Case %d: second\n", Count);}return 0; }總結
以上是生活随笔為你收集整理的hdu3951-(Coin Game)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 域论--概览
- 下一篇: # POJ-1979(BFS)