前言
会持续更新的呢,毕竟博弈论是个毒瘤啊。
其实不要以为博弈论很变态,它是很有趣的。能理解透的话,一点都不难。其实,博弈论的本质,就是教你van♂游戏啊!
从一个简单的问题(Nim)入手
有n堆石子,你每次珂以从某一堆中取出若干个石子。先后手轮流操作。如果某个人把石子取完了,那就赢了。换句话说,如果某个人没有石子取了,那就输了。
先手有必胜策略么?
我们遇到什么问题,也不要怕,暴力的面对它!消除AC的最好办法就是爆搜!加油,TLE!
最强的数据是$n<=1e5$,石子数$<=1e18$。而我们只需要两三行代码就能解决问题。爆搜都没有这么短。
我们考虑把每一堆石子的数量二进制拆分。(为什么是二进制?因为二进制只有$0$和$1$,没有系数,方便考虑)比如$7$就变成$4+2+1$。
我们把它变成一个$n$行$loga$列的矩阵。比如$a={3,4,7}$,变成:1
2
30 1 1
1 0 0
1 1 1
考虑先手必败的情况:每一列上的数和都是偶数时,必败。
(珂朵莉第一博弈定理)
证明:每一列和均为偶数时,先手必败
对于某个$a_i$,我们把它减去某个数,就相当于把$a_i$某一些位置上的0/1变成了1/0。
那么我们找一个最高位不低于$a_i$的$a_j$,把相同的位置上的0/1也变成1/0。
(由于每一列的和都是偶数,所以我们肯定能找到一个最高位不低于$a_i$的$a_j$)
这样一波操作,每一列的和肯定还都是偶数。先手能操作,后手就一定能操作。后手操作到最后一步,先手就没了。而且先手肯定赢不了。
证毕
所以除了这样以外,肯定是先手必胜。也能想象出必胜策略:把某一堆石子拿掉一些,让剩下的局面变成必败型,然后留给后手下。根据上面的“珂朵莉第一博弈定理”,后手必败,所以先手必胜。
组合游戏
都尼玛是定理。自己查资料,或者参考刘汝佳的《算法竞赛入门经典——训练指南》(小蓝书)。要电子稿的联系3348064478@qq.com,我会友情赞助的。
把别的游戏转化成Nim游戏
Nim游戏的精髓在于几个关键词:
- “减少”
- 没了就赢了
这里,减少打上了引号。因为减少,珂以是各种你想不到的形式,比如说把某个数变成它的一个因数,也是一种“减少”。(本质就是,把它分解质因数,然后减少了几个项的指数)。
当然,减少了什么变量,也是一个珂以转化的点。举几个刘汝佳书上的例子罢。
翻棋子游戏
有一个n行m列的01矩阵。每次珂以选一个为1的位置(x,y),把它和同一行/列上,且在严格左/上方位置的一个位置,同时翻转(异或1)。不能操作就输了。先手还是后手必胜。
解法
把一个为1的位置上的(x,y)看成两堆大小为x和y的石子。原因:同一行/列,就是告诉你只能改变x,y中的一个。严格左/上方告诉你必须要是减小。好的,到这一步就能理解为什么这样能转化成Nim了。
除法游戏
n行m列的矩阵,每一行有一些正整数。先后手轮流操作。每次选择同一行中,若干个元素,把这些数都变成它们的某个真因子(就是不等于自己,而且是自己的因数)。不能操作的输。
(PS:1没有真因子)
解法
把每一行的所有数的质因数的指数和相加。原因:真因子相当于减少某一项质因数的指数。同一行只是唬你的幌子。只要把同一行的加起来就珂以了。