1006 学博弈论导致的(2025“钉耙编程”中国大学生算法设计春季联赛(2))

学博弈论导致的(2025“钉耙编程”中国大学生算法设计春季联赛(2))

在这里插入图片描述
在这里插入图片描述

这个假设的正确性来源于博弈论中的 Nim 游戏游戏理论 的分析。我们通过将游戏状态转化为一个等价的“拿钱”问题,从而能够使用已知的博弈论结论来解决这个问题。具体解释如下:

游戏的本质

在这个问题中,玩家的操作会改变桌面上的红宝石、蓝宝石和宝盒的数量。我们可以将这些物品映射到一个类似于“拿钱”的博弈模型:

  • 红宝石 代表 1 元钱
  • 蓝宝石 代表 2 元钱
  • 宝盒 代表 4 元钱

至于为什么能够这么设置每一个宝石的价格,大家可以按照说明玩一下就能知道这个结论。(实际上可能需要大家猜一下),当然,也可以采用sg函数来达标得出结果。

转换成一个“拿钱”问题

每个玩家每次可以从桌面上的物品中进行一项操作,这相当于从一个总的金额中取走一定金额。具体来说,操作规则与“拿钱”的过程等价:

  1. 拿走 k 块红宝石,相当于从总金额中拿走 k 元钱,且 k ∈ [1, 3]
  2. 将一块蓝宝石变成红宝石,相当于将 2 元钱变成 1 元钱,类似于“钱的转换”。
  3. 拿走 1 块蓝宝石并选择是否再拿走 0 或 1 块红宝石,这相当于从总金额中拿走 2 或 3 元钱。
  4. 拿走 2 块蓝宝石并让桌面自动出现 1 块红宝石,相当于从总金额中拿走 2 元钱,然后增加 1 元钱,相当于取走 1 元钱。
  5. 拿走宝盒并按指定的方式触发增加蓝宝石或红宝石的行为,相当于增加一定的金额。

所有这些操作都可以看作从一个“总金额”中取走一定的数额,每次操作的本质就是减少桌面上的物品(即减少总金额),并最终通过轮流操作让一方“获胜”。

利用 Nim 游戏的结论

在博弈论中,Nim 游戏的经典结论告诉我们:如果两个玩家轮流从堆中拿取物品,每次可拿 1、2 或 3 个物品,那么这个问题的胜负由当前的“剩余物品数”决定。具体而言:

  • 如果剩余的物品数 total_value % 4 == 0,则处于 平衡 状态,后手玩家(Bob)可以通过合理操作确保最后的胜利。
  • 否则,当前玩家(Alice)可以通过合理操作将局面逼入一个“剩余物品数” total_value % 4 == 0 的平衡状态,从而确保最终获胜。

为什么 r + 2b + 4m 是关键

  • 由于操作的本质是从总金额 r + 2b + 4m 中拿取一定的“钱”,我们可以将这款游戏视为一个类似于 Nim 游戏 的问题。
  • r + 2b + 4m 的总值就是桌面上物品的总“价值”,它是玩家操作的基础。在这个“拿钱”模型中,我们的目标是判断这个总值的“余数”对胜负的影响。
总结

通过将红宝石、蓝宝石和宝盒分别映射到 1 元、2 元和 4 元的“钱”上,问题变成了一个经典的博弈问题,类似于 Nim 游戏。在 Nim 游戏 中,当前玩家的策略与剩余“总金额 % 4”的值密切相关:

  • 如果总金额能被 4 整除(total_value % 4 == 0),则后手玩家 Bob 总是能获胜;
  • 否则,先手玩家 Alice 能通过合理操作获胜。

这个推理的关键点在于,通过映射物品的数量到“钱”的数量,我们能够有效地应用博弈论的经典结论,从而得出正确的获胜者。

代码实现:

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define BoBoowen ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;

const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int N = 5e5 + 10;

void solved()
{
    int r, b, m;
    cin >> r >> b >> m;
    if ((b * 2 + r) % 4)
        cout << "Alice" << endl;
    else
        cout << "Bob" << endl;
}

signed main()
{
    BoBoowen;

    int T = 1;
    cin >> T;
    while (T--)
    {
        solved();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值