UVA 11892 浅谈无SG函数纯分析博弈论

本文探讨了在没有SG函数可利用的情况下,如何通过博弈论分析解决复杂的游戏问题,特别是针对UVA 11892题目的解法。作者指出,对于难以分析SG函数的博弈论问题,应从题目本身和与经典nim游戏的关系出发寻找策略。通过分析游戏状态和规则,得出结论:当存在不受规则限制的石子堆时,先手有必胜策略。如果所有石子堆均为1,则遵循nim游戏的奇偶性规则决定胜负。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
世界真的很大
博弈论的题还是很多了,其中SG函数的存在使得很多看似无解可循的博弈论有了固定的解法
但是有很多博弈论的题的SG函数是不好分析的,就算打表找规律也无处下手
这样的题数据范围往往很大,这就几乎决定了其主要有题目性质决定
凡是博弈论的组合游戏的题,不要忘了其老祖宗nim游戏,要去思考与原版游戏的关系
看题先:

description:

考虑给普通的nim游戏加上一条规则
如果前一个人摸一堆,没有摸完的话,就必须和他摸同一堆石子

input

第一行一个整数T表示T组数据
每组数据第一行一个整数n,表示n堆石子
接下来n个整数,表示每一堆有多少石子

output

输出一个字符串表示先手胜还是后手胜

首先分析一下题意
题目几乎是建立在nim游戏的基础上的,而且SG函数实在是不太好推,所以我们要从题目性质来分析,而且要考虑其与原nim游戏的关系

假设只有第一堆需要遵守这道题新定的规则,其余的所有堆都不需要遵守这道题的规则
那么把第一堆取完之后,其余石子的胜负状态就已经唯一决定了
假设其余石子的异或和是0,就是说先手必败的话,那么现在的先手肯定希望面临那个状态的是对方而不是自己,于是他就会直接把第一堆石子拿完,这样就是对面面临异或和为0的状态了
考虑其余石子异或和不为0,即先手必胜,那么现在的先手就希望是自己而不是对方来面临这个局面,于是乎他就会一下把这堆石子拿到只剩一颗,由于规则限制,对方只能摸那剩下的一颗,这样就是自己来面临必胜的局面了

这样看来先手有必胜策略,但是我们只是考虑了受规则限制的石子堆数为1的情况,现在需要把情况扩充到更完全的情况中去
考虑有很多堆需要遵守规则约束的石子,先手完全可以控制后手摸完一堆堆的石子只留下一对需要受限制的石子,就成了情况一
现在考虑当石子数为多少的时候,受限制等价于不受限制,只有当石子数为1的时候

那么我们就将石子数为1的和石子数不为1的堆分开考虑,前者指代之前讨论的情况中的不受限制的石子,后者指代前面讨论的情况中的受限制的石子堆
注意他们是完全等价的,也就是说先手有必胜策略,当且仅当有受限制的石子堆存在可供先手操控

也就是说只要有受限制的,即石子数不为1的石子堆存在,就是先手必胜了

那么需要处理的只有全部石子堆都为1的情况
显然和普通nim游戏一样,判断一下异或和,全是1就是奇偶数,就行了,偶数就是先手必败,奇数就是先手必胜

PS:感觉这游戏完全不公平嘛

完整代码:

#include<cstdio>
using namespace std;

int T,n,a;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        int ok=1;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a);
            if(a!=1) ok=0;
        }
        if(ok && n%2==0)
            printf("piloop\n");
        else printf("poopi\n");
    }
    return 0;
}
/*
Whoso pulleth out this sword from this stone and anvil is duly born King of all England
*/

嗯,就是这样

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值