HDU 1846 Brave Game(Bash博弈)

一道裸的Bash(巴什博弈)题目
题目传送门

题意:有一堆石头,石头数量为n,两个绝顶聪明的人轮流从中抽取一些石头并扔掉,每人每回合最少抽取1个石头,最多抽取m个石头,最后把石头拿完的人胜利,问最终是先手必胜还是后手必胜

思路:首先给出结论,如果n%(m+1)==0,后手必胜,反之,先手必胜
理由:①如果n%(m+1)==0,拿个小例子,比如n=8,m=3,第一次先手随便取,比如取个1,后手就可以取3,然后先手无论取1/2/3,都不可能将4取完,并且下一次对手一定可以取完,所以这种情况后手必胜。
有人可能会说,先手第一次不取1,取2,好,就算取2,后手也取2,不还是回到了剩余4个石头的局面,就算先手一开始取3,结局仍然一样
所以,如果这个模等式成立,无论先手取什么,后手都可以抽取若干个,让剩下的石头数目又满足等式,一直这样子重复下去,先手必败。
②如果这个等式不成立,比如n=10,m=3,先手可以取2个,将局面扭转成①的情况,但是此时不是先手取石头了,而是后手取石头了,所以现在的情况是后手必输。
代码如下

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
//const int N = 2e5+10;
//int a[N];

signed main()
{
    
    
    int t,n,k;
    cin>>t;
    while(t--){
    
    
        cin>>n>>k;
        if(n%(k+1)==0) cout<<"second"<<endl;
        else cout<<"first"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/YSJ367635984/article/details/113748635