博弈论 题解乱写
1.对于一个转移方程 $dp_{i,j}= not (dp_{i-1,j} \ and \ dp_{i,j-1})$。
可以发现除了前两行两列,其他每个对角线的取值是相同的。
所以只要做前三行三列的 dp 即可得到整个 dp 数组。
然后这个东西的初始值不一定要整齐,只要拓展过来两三行都可以解决。
2. $SG$ 函数、$SG$ 定理。
对于有向无环平等博弈游戏的一个状态 $x$ ,考虑他的每个后继 $y$,那么 $sg_x=mex_{y}(sg_y)$。
对于多个独立的游戏,有 $sg_G=sg_{G_1} \ xor \ sg_{G_2}...\ xor \ sg_{G_m}$。
3.一堆石子,每个人每次可以取 $[1,k]$ 个拿走。
这个游戏的 $SG$ 函数值为 $sg_i=i \ mod \ k+1$。
4.一堆石子,每个人每次可以取 $[l,r]$ 个拿走。
这个游戏的 $SG$ 函数值为 $sg_i=\frac{i \ mod \ (l+r)}{l}$。
5.一堆石子,每次可以分裂为两堆或者取任意多石头。
这类题的思路都是考虑把当前的游戏分裂为多个子游戏,然后可以直接用异或处理。
那么 $SG$ 函数值的转移方程容易列出。
6.一共 $n$ 个白色格子,每次可以给连续的两个白色格子染成黑色。
仍然是考虑将当前游戏分类为两个子游戏,然后有 $sg_x=mex_i(sg_i,sg_{x-i-2})$。
这个题的 $SG$ 函数值是循环的。然后这个玩意有一个找到循环节的技巧。
打开一个有自动换行的记事本,然后拖宽度。
7. cf 抽积木。
发现 011 和 110 是等价的。
然后发现 101 和 010 是不可继续操作的,也就是说可以起到分割为两个游戏的作用。
对于剩下两种状态,可以用状压来搞一个 dp。
8.每次选树上一个节点然后删除该节点到根的所有点。
考虑删除一个节点,会起到的作用是删除该节点到根的路径,也就是把原游戏分裂为了多个子游戏。
然后暴力做就是平方复杂度的。
可以发现这个东西可以用增量的方法统计一下。
然后问题需要支持的操作就是给整个集合异或一个值,合并集合,求集合的 $mex$。
这个东西用类似 $trie$ 树的线段树合并即可,打标记然后换儿子来实现异或操作。