省选博弈专题
A Chess Game
SG函数模板题
[AGC016F] Games on DAG
先手必胜方案数 \(=\) 总方案 \(-\) 先手必败方案 \(=\) \(2^m-\sum_G[SG(1)=SG(2)]\)
问题转化到计数 \(1,2\) 号点 SG 函数值相同的方案数,考虑 SG 函数的一些性质(本质上是 \(\operatorname{mex}运算符\))设一个点的 SG 值等于 \(x\) 则它一定向 SG 值为 \([0,x)\) 的点连有边(每个值至少连一条),不会向 \(x\) 的点连有边,对于 \((x,+\infty)\) 则无限制。这启示可以使用分层图去刻画整个图的局面(每层图中的点 SG 值相等),并且只要使得 \(1,2\) 号点在同一层即可,这个东西是可以通过 \(O(3^n)\) 枚举子集来做的。
具体的设状态 \(f_S\) 表示只考虑 \(S\) 这个点集的点导出子图的合法方案,每次转移枚举子集 \(T\),然后将子集的 \(T\) 所有点的 SG 值 \(+1\),然后 \(T\) 中的每个点至少向 \(T\) 在 \(S\) 中的补集合中连一条边。
时间复杂度为 \(O(n3^n)\),有 \(O(3^n)\) 的爆标做法,先咕咕咕。
[AGC014D] Black and White Tree
手模发现,先手一定能牵着后手的鼻子走,考虑这样一种决策,先手每次在上次操作隔一个的位置操作(叶子节点下方视作有一个白点),否则无意义,则后手只能选择那一个隔开的位置。
所以可以将先后手操作看做一个二元组,这个二元组必须相邻,如果最后能将这个树铺满二元组则后手必胜,否则先手必胜。
注意到如果能合法,则合法方案只会有一种(证明考虑从叶子边界往上填),所以 dfs 一遍即可。
时间复杂度 \(O(n)\)。
[AGC002E] Candy Piles
先按降序排序,考虑转化为有向图游戏,即对于排序后的楼梯形从左下角只能向上或向右走是否有必胜策略,手模发现在一条对角线上点的状态是相同的,考虑证明,假设有一个败态,则它的下方和左方都是胜态,而这两个胜态又会在败态的左下方带来一个败态,这是能递推生成的(证明得很奇怪,感觉不如用数学归纳法)。所以可以直接移动到边界,然后去计算边界的状态。
[AGC010D] Decrementing
考虑问题的弱化版本,如果没有整体除 \(\gcd\) 怎么做,显然若 \(s-n\) 是奇数则先手胜,否则后手胜。
那么考虑先手是否有能一直维持 \(s-n\) 奇偶的策略。注意到一个事实,若整体除一个奇数则不会影响 \(s-n\) 的奇偶,所以先手只要每次保证序列中至少有两个奇数即可(初始状态一定能有一个奇数),所以只要 \(s-n\) 为奇数则先手必胜。
考虑若初始 \(s-n\) 为偶数的情况,还是站在先手的视角,考虑是否能调整为对方 \(s-n\) 为偶数的状态,回到刚才的事实,只有整体除一个偶数才能影响奇偶,所以先手一定是选取唯一(否则就输了)的那个奇数减一,然后游戏继续,由于后面的情况是不确定的,所以得递归下去模拟一遍,由于每次都会除一个数,所以时间复杂度为 \(O(n\log V)\)。
[AGC029D] Grid game
注意到先手者必须一直行动,那么问题变成一个关于后手者的贪心问题,由于求最小,直接暴力模拟即可做。