hdu1846 Brave Game (巴什博奕裸题)

hdu1846

问题描述

1、 本游戏是一个二人游戏;
2、 有一堆石子一共有n个;
3、 两人轮流进行;
4、 每走一步可以取走1…m个石子;
5、 最先取光石子的一方为胜;

如果游戏的双方使用的都是最优策略,请输出先手后手哪个人能赢。

分析:

当剩下m+1个石子的时候,无论取多少,剩下的一定在m以内,该情况下对方一定赢
把n表示成 n=(m+1)*a+b
先手第一轮取走b个,剩下 (m+1)*a 个
后手取走x个,之后先手只需要取走(m+1)-x个,然后就变成了剩下 ( m + 1 ) * (a-1)个
先手能够一直把剩余石子保持在(m+1)的倍数上,最后先手必胜

如果开始的时候b就为0,也就是说如果开始的时候n就是(m+1)的倍数,
先手取完之后,后手就可以用同样的方法,先手必败

总结:n%(m+1)!=0 的时候先手必胜,否则必败

code:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int T;
    cin>>T;
    while(T--){
		int n,m;
        cin>>n>>m;
        if(n%(m+1)==0){
            cout<<"second"<<endl;
        }else{
            cout<<"first"<<endl;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/95075168