ACM-ICPC中博弈论的一些小小总结

博弈论

参考

[1]https://blog.csdn.net/clover_hxy/article/details/53818624
[2]https://blog.csdn.net/foreyes_1001/article/details/82862324
[3]https://www.cnblogs.com/lxm940130740/p/3268803.html

一.尼姆博弈


问题提出

下面给出Nim游戏的三种变体

  1. 现有nnn堆石子,每人每次可以从其中选出一堆,取1≤x≤k1 \le x \le k1xk颗石子,最后一人取完获胜,如何判断先手必胜还是必败?
  2. 现有nnn堆石子,每人每次可以从其中选出至多kkk堆,每堆中可以取任意颗石子,最后一人取完获胜,如何判断先手必胜还是必败?
  3. 现有nnn堆石子,没人每次可以从选111堆,并从这一堆中取任意数量的石子,最后一人取完失败,如何判断先手必胜还是必败?

其中第333种情况也被叫做anti−nimanti-nimantinim游戏.

解决方法

  1. 这种变体比较简单,只需要把每一堆的石子个数模上k+1k+1k+1,然后当成一般的NimNimNim游戏来玩即可.
    因为必胜态的一方总可以将败方操作的使得模数改变的一堆再改变回来.例如AliceAliceAlice改变了某一堆得石子使得模数从x1−>x2x_1 ->x_2x1>x2了,而如果当前堆得石子个数仍然≥k+1\ge k+1k+1,那么BobBobBob可以取k+1−(x1−x2)k+1-(x_1-x_2)k+1(x1x2)个,使得模数重回x1x_1x1.
    当然也可以这样解释,每堆石子当做是一个独立的游戏,而每个独立游戏的SGSGSG函数计算方法为SG(x)=x%(m+1)SG(x) = x \% (m+1)SG(x)=x%(m+1)

  2. 这种变体相对复杂一些,但解决方案也很简单,就是将每堆石子的个数以二进制的形式表示,并统计每一位上为111的石子堆个数sumsumsum,如果每一位统计的个数sumsumsum都可以被k+1k+1k+1整除,那么先手必败,否则先手必胜.
    这个证明起来相对复杂一些.
    [1]从每一位的sum%(k+1)=0sum \% (k+1) = 0sum%(k+1)=0的状态,一定会转移到有一位sum%(k+1)≠0sum \% (k+1)\ne 0sum%(k+1)̸=0的状态:这是因为最多可以对kkk堆石子进行操作,而每次操作至少使得一堆的某一位二进制位受到影响.在这一位上最多只能改变kkk堆,因为这一位的sumsumsum一定不会被k+1k+1k+1整除.
    [2]从sum%(k+1)≠0sum \% (k+1) \ne 0sum%(k+1)̸=0的状态一定可以转移到任何一位sum%(k+1)=0sum\%(k+1)=0sum%(k+1)=0的状态:我们从高位向低位考虑,假设之前考虑的所有位都已经满足条件,且操作了1≤m≤k1\le m \le k1mk堆(由于这mmm堆的高位二进制已经被操作过了,所以这m堆低位的二进制位我们可以随意改变).我们当前位的sumsumsum(sumsumsum即除掉之前操作的mmm堆,剩下的堆中该二进制位为111的统计个数):(1)如果sum≤k−msum \le k-msumkm,显然可以将这些111位全部置位000,m=m+summ= m + summ=m+sum.(2)如果sum>k−msum \gt k-msum>km,则我们从m堆中选取k+1−summ堆中选取k+1-summk+1sum堆置为111,mmm堆剩下的置为000即可,着一定是可行的,因为k+1−sum≤mk+1-sum \le mk+1summ.

  3. anti−nimanti-nimantinim博弈我们只需要记住两个必胜态的条件就可以了,详细证明可以看参考博客.
    [1]当石子个数全部为111,且nim=0nim = 0nim=0时.
    [2]当至少有一堆石子个数大于111nim≠0nim \ne 0nim̸=0时.


二.转化为NIM博弈

问题提出

一个100∗100100*100100100的棋盘,坐标范围是[0,100][0, 100][0,100]的,上面有n个棋子。Alice 和 Bob轮流操作,每次操作可以把一枚棋子向左或者向下或者向斜下方移动任意步,也就是(x,y)(x,y)(x,y)有这三种移动(x−l,y),(x,y−l),(x−l,y−l)(x-l, y), (x, y-l), (x-l, y-l)(xl,y),(x,yl),(xl,yl)。多个棋子可以同时在同一位置。第一个把棋子移动到(0,0)(0, 0)(0,0)点的人获胜。 问是否先手必胜。

解决方法

这并非直接的NimNimNim游戏,因为NimNimNim游戏中必胜态的定义是最后一个人将棋子移动到(0,0)(0,0)(0,0),而这个游戏中要求的必胜态是第一个将棋子移动到(0,0)(0,0)(0,0)的人获胜.
假设一开始所有的棋子都不在(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)这三条直线之一,否则这个人必胜.
如果某个人将棋子移动到(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)中任意一条直线上,那么这个人将失败,因此他绝对不可以将棋子移动到这三条直线中去.因此,每个棋子的可移动范围相当于增加了一个限制.实际上也就是棋子的sgsgsg函数计算方法改变了.当一方不能移动棋子的时候,便输了.这也就通过改变sgsgsg函数计算方法成功转化成为经典的NimNimNim博弈了.


三.巴什博弈

问题提出

只有111堆石子,每次至多取kkk个,至少取111个,最后一个取完获胜.

解决方法

如果石子数能被k+1k+1k+1整除,则先手必败,否则必胜.
这是显然的因为模数为000,无论取多少个都会使得模数不为000.而模数为t>0t > 0t>0时候,只要下一个人取走ttt就会使得模数重回000.

上述NimNimNim博弈中的第一个问题可以看成是巴什博弈和NimNimNim博弈的结合.


四.阶梯尼姆游戏

问题提出

在一个阶梯上,每层有若干个石子,每次可以将某一层中若干个石子移动到他下一层阶梯中去.问先手是否必胜.

解决方案

我们可以认为从奇数阶梯移动到偶数阶梯相当于是把石子从奇数阶梯拿走.这样就转化为了奇数堆的取石子游戏.
对于从偶数阶梯拿走到奇数阶梯的石子,我们可以对称地从那个奇数阶梯中拿走相等的石子到下一个偶数阶梯中去,相当于抵消掉了从偶数阶梯拿石子的操作.因为每个奇数阶梯下都有一个偶数阶梯,因此可以保证我们的操作总是可以进行.


五.取走-分割游戏

问题提出

这类游戏允许取走若干东西,也允许将原来的一个游戏分隔成为几个游戏.
例:定义有如下操作的游戏:
[1]从一堆中取走任意个数的石子.
[2]将一堆石子分成两堆不为空的石子.

解决方案

这类问题也容易解决,只要稍微注意一下sgsgsg函数的计算即可,最后求NimNimNim和即可.
例如sg(5)sg(5)sg(5)的后继有
sg(0),sg(1),sg(2),sg(3),sg(4),sg(1)⨁sg(4),sg(2)⨁sg(3)sg(0),sg(1),sg(2),sg(3),sg(4),sg(1) \bigoplus sg(4),sg(2)\bigoplus sg(3)sg(0),sg(1),sg(2),sg(3),sg(4),sg(1)sg(4),sg(2)sg(3)
在这些后继中找最小的未出现过的自然数,即sg(5)sg(5)sg(5)的值.

小结论:对于所有的k≥0k \ge 0k0,有g(4k+1)=4k+1;g(4k+2)=4k+2;g(4k+3)=4k+4;g(4k+4)=4k+3g(4k+1)=4k+1;g(4k+2)=4k+2;g(4k+3)=4k+4;g(4k+4)=4k+3g(4k+1)=4k+1g(4k+2)=4k+2g(4k+3)=4k+4g(4k+4)=4k+3


六.寻找必败态解题

问题描述

nnn堆石子,每次可以选定一堆石子,取走任意颗,然后从该堆剩下的石子中取走任意颗放在任意未取完的堆中,无法操作的人失败.

解决方案

[1]当000堆时显然必败.
[2]当只有111堆时,显然必胜.
[3]当只有222堆时,如果全都相等,那么必败,否则必胜.
[4]当只有333堆时,必胜,因为总可以操作数量最多的石子堆,使得只剩下两堆且石子个数相同.
[5]当只有444堆时,如果有有两组各个组内石子数相同的情况,则必败,否则必胜.因为四堆两两相同的情况下,要么转移到333堆(必胜态),要么转移成四堆不存在两两相同,而此时,对方总可以再转移到四堆两两相同的情况.

规律:偶数堆,且可以分成n2\frac{n}{2}2n组组内两两相同的情况必败.其他情况必胜.

证明:只要证明必胜态总可以转移到必败态以及必败态无论如何都会转移到比必败态即可,证明相对来说较为容易.

另一个问题 Wannafly H.树链博弈

给出一颗树,树上的节点非黑即白,每次可以选定一个黑色结点将其变白,并且从该黑色结点到根的路径上所有点的颜色都可以任意设置.给出必胜局态的策略.

问题解答

[1]当只有根节点黑色时候,先手必胜
[2]当有333个节点的树,两个叶子节点为黑色时候,根节点为白色的时候,先手必败.
[2]当有333个节点的树,两个叶子节点为黑色时候,根节点为黑色的时候,先手必胜.

我们可以猜测,任意深度的黑色结点个数为偶数的时候,必败,其他状态都是必胜态.

证明:
[1]当存在深度为xxx的黑色结点个数为奇数时,这是个必胜态.因为我们取(最大的xxx)层的一个黑色节点,将其设置为白色.并且沿路改变路径上点的颜色,总能使得所有深度下,黑色结点的个数为偶数.证明了必胜态总有一种方法可以转移到必败态.
[2]当所有深度为xxx的黑色结点个数都是奇数时,无论选择哪个深度的黑色结点将其染白,该层黑色结点的个数将回归奇数.证明了必败态无论如何都会转移到必胜态.
[3]无法移动的情况即黑色结点个数为000,根据我们的定义满足必败态的条件.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3312-[SDOI2014]数表【莫比乌斯反演,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3312 题目大意 定义F(x)F(x)F(x)表示xxx的约数和 给出n,m,an,m,an,m,a,求∑i1n∑j1m[F(gcd(i,j))≤a]∗F(gcd(i,j))\sum_{i1}^n\sum_{j1}^m[F(gcd(i,j))\leq a]*F(gcd(i,j))i1∑n​j1∑m​[F(gcd(i,j))≤a]∗F(g…

使用 IIS 在 Windows 上托管 ASP.NET Core2.0

准备:操作系统:Windows Server 2008 R2 或更高版本开发环境:VS2017回到顶部第一步:新建项目ASP.NET Core Web应用程序在 Visual Studio 中,选择“文件”>“新建”>“项目”。在新建项目对话框的左侧窗格选择“.N…

数学推导题,NTT,快速数论变换,Wannafly-导数卷积

导数卷积 题目描述 题解 参考了一下标程的推导过程,因为这个推导对我这种数学弱渣真的有点难鸭. [1]f(x)f(x)f(x)的iii次导函数: f(i)(x)ai∗i!0!ai1∗(i1)!1!∗x1...an−1∗(n−1)!(n−1−i)!∗xn−1−if^{(i)}(x) a_{i}*\frac{i!}{0!} a_{i1}*\frac{(i1)!}{1!}*x^{1} ...…

初一级练习题(2019.3.8)

成绩: rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111hkyhkyhky250250250100100100100100100505050000222lyflyflyf240240240100100100505050505050404040333wjjwjjwjj210210210909090707070505050000555lthlthlth12012012020202050505050505…

使用 C# 代码实现拓扑排序

0.参考资料尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用。https://www.codeproject.com/Articles/869059/Topological-sorting-in-Csharphttps://songlee24.github.io/2015/05/07/topological-sorting/https://www.cnblogs.com/skywang1…

P3327-[SDOI2015]约数个数和【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P3327 题目大意 TTT组询问给出n,mn,mn,m,d(x)d(x)d(x)表示xxx的约数个数,求∑i1n∑j1md(i∗j)\sum_{i1}^n\sum_{j1}^md(i*j)i1∑n​j1∑m​d(i∗j) 解题思路 对于iii和jjj的两个约数a,ba,ba,b如果他们…

数学推导题,NTT,快速数论变换,Wannafly-乒乓球

乒乓球 题目描述 小 BoBoBo 是某省乒乓球名列前茅的选手,现在他有 nnn 颗乒乓球一字排开,第iii颗乒乓球的权值为 wiw_iwi​ 每次他会随机从现有的乒乓球中等概率选一颗拿走,然后得到的收益是这颗球左边第一个乒乓球和右边第一个乒乓球的权值…

ASP.NET Core 2.1带来SignalR、Razor类库

随着.NET Core 2.1的发布,微软推出了 ASP.NET Core 2.1。这是一个强大的版本,包括实时通信库SignalR,更新的模板使GDPR更容易遵守,并且针对Angular、React,以及React Redux更新了SPA模板。在2013年发布传统的ASP.NET时…

【bfs】WJ的逃离

WJ(J)的逃离 题目大意: 有一个nm的矩阵,*是不可走的,0是可走的,求1,1到n,m的最小转弯次数 原题: 题目描述 当WJ醒来时,发现自己被困在一个地图的左上角,幸好WJ有张图…

P2408- 不同子串个数【SA】

正题 题目链接:https://www.luogu.com.cn/problem/P2408 题目大意 给出一个字符串,求有多少个不同的子串。 解题思路 进行后缀排序之后,对于位置iii他有n−i1n-i1n−i1个后缀,然后它和排在它前面的后缀有heightiheight_iheighti​个重复的…

针对ASP.NET Core Web API的先进架构

.NET Core 最初是在2016年发布的,随着.NET Core 2.0的发布,微软拥有了下一个通用、模块化、跨平台和开源的平台主版本。.NET Core已经创建了许多API,在当前版本的.net框架中均可用。它最初是为下一代ASP.NET解决方案而创建的,但现…

线段树-HDU5737-这题有点神

HDU5737 题意 [1][1][1]有长度为nnn的序列A,BA,BA,B [2]Q[2]Q[2]Q此操作两种类型 (1,l,r,x)(1,l,r,x)(1,l,r,x)将区间[l,r][l,r][l,r]的aia_iai​覆盖为xxx(2,l,r)(2,l,r)(2,l,r)询问区间[l,r][l,r][l,r]中有多少ai≥bia_i \ge b_iai​≥bi​ 题解 考虑用线段树维护. 重点考…

【高精】Oliver的成绩(jzoj 2008)

Oliver的成绩 题目大意: Oliver考了一次试,现在知道他的语数英的成绩,还有年级其他n个人的成绩,现在问Oliver三科各和年级第一差多少分,如果Oliver在这一科上是第一,则输出‘0’ 样例输入 10 10 10 …

P4070-[SDOI2016]生成魔咒【SA,平衡树】

正题 题目链接:https://www.luogu.com.cn/problem/P4070 题目大意 长度为nnn的字符串,对于每个iii求字符串1∼i1\sim i1∼i部分有多少个不同的子串。 解题思路 对于整个串ans∑i1nn−i1−heightians\sum_{i1}^nn-i1-height_ians∑i1n​n−i1−heighti​&#xff…

ASP.NET Core 2.1 使用Docker运行

1.新建一个 ASP.NET Core 2.1 项目然后运行一下项目,确保我们刚刚建立的项目可以正常运行。2.编写 Dockerfile新建一个文本文件,命名为 DockerfileFROM microsoft/dotnet:2.1-aspnetcore-runtimeWORKDIR /appCOPY . .EXPOSE 80ENTRYPOINT ["dotnet&…

【DP】和谐的奶牛(jzoj 1750)

和谐的奶牛 题目大意: 有一些括号(保证是合法的,合法:每一个左括号都有自己配对的有括号),现在要将这些括号分为两组(其中一组可以为空),分完组后括号的顺序要和原来的…

费用流-Wannafly Day2 TwoGraph-神题

TwoGraph 题意 题解 这真是一道神题,这题有两点比较难想,其中第一点是最难想的. 我们先考虑只有一张图的情况. 性质: [1]如果给每个点匹配一条边,形成一个(点,边)(点,边)(点,边)对,其中点不能重复出现,边也不能重复出现.那么这些对形成的图的联通块要么是树,要么是环套树. 证…

ASP.NET Core Web API 与 SSL

SSL一直没有真正研究过SSL,不知道下面的理解是否正确。SSL是Secure Sockets Layer的缩写,它用来保护服务器和客户端之前的通信。它是基于信任加密的概念。在介绍SSL的原理之前,首先介绍一下加密(Encryption)的概念。刷…

P5662-纪念品【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5662 题目大意 有TTT天,nnn个纪念品,每个纪念品每天的价格不同,数量不限。开始小明有mmm块钱,求最后一天的最多钱。 解题思路 因为一个纪念品可以一天卖出并且一天买入&#…

【模拟】聊天服务器的外部流量

聊天服务器的外部流量 题目大意: 有一个通讯系统,可以将某人邀请进来(name),也可以将某人T出去(-name),也可以向群中的所有人发一条信息(name:…&#xff0…