巴什游戏入门(Bash Game)

朴素巴什游戏

首先给出简单的例题:

Problem - 1846 (hdu.edu.cn)

题意:

有n堆石子,甲先取,乙后取。每次可以拿1~m个石子,轮流拿下去,拿到最后一颗的人获胜。给定n和m,问你先手赢还是后手赢

分析如下:

当n<=m时,由于一次最少拿1个,最多拿m个,甲可以一次性拿完,先手赢

当n==m+1时,无论甲拿走多少个(1~m个)剩下的都多于1个,少于等于m个,乙都能一次性拿走剩下的石子,后手取胜

上面两种情况可以拓展成以下两种情况:

1.如果n%(m+1)==0,那么甲不论拿多少,设甲拿了k个,乙都拿m+1-k个,使得剩下的永远是m+1的整数倍,直到最后的m+1个,所以后手赢

2.如果n%(m+1)!=0,那么还有余数设为r,甲先拿走r个,这样就转化为n%(m+1)==0的情况且乙是先手,那么这时先手甲赢

所以在这个游戏中,先手赢的机会比后手大

Code:

#include <bits/stdc++.h>
using namespace std;
int n,m;
void solve(){
    cin>>n>>m;
    if(n%(m+1)==0) puts("second");
    else puts("first");
}
int main(){
    int T;
    cin>>T;
    while(T--) solve();
    return 0;
}

巴什游戏变式

先给出一道例题:

 Problem - 2147 (hdu.edu.cn)

题意:

两个人进行游戏

给定一个棋盘n*m,先手从右上角(1,m)出发,进行一次操作

每次操作有三种选择,往左推进一格,往下推进一格,往左下推进一格

问先手赢还是后手赢

分析如下:

为什么它属于巴什游戏变式呢,因为我们发现它就是二维的巴什游戏

对于一些简单博弈,我们只需画出PN图然后找规律即可

对于画PN图的步骤:
步骤1:将所有终结位置标记为必败点(P点);
步骤2: 将所有一步操作能进入必败点(P点)的位置标记为必胜点(N点)
步骤3:如果从某个点开始的所有一步操作都能进入必胜点(N点) ,则将该点标记为必败点(P点) ;
步骤4: 如果在步骤3未能找到新的必败(P点),则算法终止;否则,返回到步骤2。

因此我们可以画出这样的PN图:

然后去找规律

我们发现标记为'P'的格子的特点是n和m至少有一个是偶数

 因此当n和m中至少有一个为偶数时,先手必胜

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值