博弈论--巴什博弈——HDU1846

/*巴什博弈:HDU--1846*/
# include<iostream>
using namespace std;
int main()
{
    int t;
    int n,m;
    cin>>t;
    while(t--)
    {
      cin>>n>>m;
      if(n%(m+1)==0) cout<<"second"<<endl;/*此处的n%(m+1)的意思是如果取余的结果不是0,就是先者为胜,否则就是后者为胜*/
      else cout<<"first"<<endl;
    }
    return 0;
}
/*巴什博弈算法总结:
问题描述基本模型:
只有一堆n 个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m 个。最后取光者得胜。


给你n,如何判断先手还是后手赢???
算法过程分析:
特殊的2种情况:
1 当n<m时,很显然是先手赢
2 当n=m+1时,不论先手取多少个(但必须是小于或等于m的),总是不能一次取完,所以只能是后手赢
如果总的物品数有 n=(m+1)*r+s个(其中:s<=m,r为自然数),先手先取s个,后手取k个(k<=m),先手只要再取(m+1-k)个
最终剩下的是(m+1)*(r-1)个也即是(m+1)的整数倍,这样无论后手怎么取,都不会把剩下的一次性取完,最终只会是先手获胜
总之就是:让最后剩下物品数是(m+1)的倍数即可
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊喵先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值