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$ 树的线段树合并即可,打标记然后换儿子来实现异或操作。