OI集训 Day17
Content:博弈论
Date:2025.8.2
课堂内容
SG 函数
表示当前游戏局面的函数,后手必胜当且仅当 SG 函数为 0。
多个游戏的组合的 SG 函数为每个游戏的 SG 函数的 异或和。
经典模型
取石子游戏
题目描述
有 堆石子,A、B 轮流取,每次从任意一堆中取出至少一个石子,不能取的输,问谁赢。
解法
一堆大小为 的 SG 函数为 ,根据 SG 函数的性质,可以发现整个游戏的 SG 函数为 。
阶梯取石子游戏
题目描述
有 堆石子放在台阶上,A、B 轮流取,每次从任意一堆中取出至少一个石子,放到下一个台阶上(如果在第 1 个台阶,则扔掉),不能取的输,问谁赢。
思路
可以发现最后的答案之和奇数层的石子有关,所以整个游戏的 SG 函数为所有奇数层 SG 函数的异或和。
树状取石子游戏
题目描述
在一颗大小为 的树上有 堆石子,A、B 轮流取,每次从任意一堆中取出至少一个石子,移动到他的父亲节点(如果在 1 号节点,则扔掉),不能取的输,问谁赢。
思路
跟上面的其实是一样的,只不过这里的答案只跟奇数层的节点的 SG 函数的异或和有关。
Bash 博弈
题目描述
有 堆石子,A、B 轮流取,每次从任意一堆中取出至少一个石子,至多取 个,不能取的输,问谁赢。
思路
每个石子堆的 SG 函数为 ,异或起来即可。
1-动态减法游戏
题目描述
有一个正整数 ,A、B 轮流在上面减去一个数,第一个人至多减 ,后面每个人减的数不超过上一次的,最先吧这个数减到 0 的人获胜。问最后谁赢。
思路
先手每次都可以取原数的 (人类智慧),所以后手必胜当且仅当 。
2-动态减法游戏
题目描述
有一个正整数 ,A、B 轮流在上面减去一个数,第一个人至多减 ,后面每个人减的数不超过上一次的 两倍 ,最先吧这个数减到 0 的人获胜。问最后谁赢。
思路
对原数进行斐波那契分解,先手每次取最低位的 1 (人类智慧 2),所以后手必胜当且仅当 为斐波那契数。
k-动态减法游戏
题目描述
有一个正整数 ,A、B 轮流在上面减去一个数,第一个人至多减 ,后面每个人减的数不超过上一次的 倍,最先吧这个数减到 0 的人获胜。问最后谁赢。
思路
只需要一种满足任何表示方法中最低非零位的值的 倍小于次低非
零位。
每次将新加入的数设为前面的数能表示的最大值 即可 (人类智慧 3)。
NimK 游戏
题目大意
有 堆石头,A、B 轮流取,每次从至多 堆中取出至少一个石头,不能取的输,问最后谁赢。
思路
求 SG 函数在 进制下的不进位加法。
Anti-Nim 游戏
题目大意
同 普通取石子游戏规则,但是不能操作的人胜利。
思路
先手必胜的条件为:
- SG 函数的和为 0 且所有游戏的 SG 函数的值均不大于 1;
- SG 函数的和不等于 0 且至少一个游戏的 SG 函数值大于 1。
例题
AGC017-D Game On Tree
思路
对于每一个子树,其 SG 函数为所有子节点的 SG 函数加上一条边的状态,即 。
提交记录:link

