HDU:3951 Coin Game

 

第一次接触博弈论的题目。

 

引用一下。

 

题意:给你n个硬币排成一圈,编号1-n,只能翻转连续的1~k个的硬币。翻最后一枚硬币者赢。


思路:博弈


 1) 若k=1,则一次只能去翻一枚,奇数先手赢,偶数后手赢。


 2)若k>1:

         

       a: 先手一次翻完,先手赢;

  

       b: 先手不能翻完,第一次必定断环。只要后手一次翻完,或将其分为相等数量的两段,


            之后先手怎么操作后手就怎么操作,后手必赢。

 

 

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    int T,kase=0;
    scanf("%d",&T);
    while(T--)
    {
        int n,k;
        scanf("%d%d",&n,&k);
        printf("Case %d: ",++kase);
        if(k==1)
        {
            if(n%2==0) puts("second");
            else puts("first");
        }
        else
        {
            if(n<=k)  puts("first");
            else   puts("second");
        }
    }
    return 0;
}


 

你可能感兴趣的:(博弈论)