NOIP2024集训Day43 博弈论
NOIP2024集训Day43 博弈论
怎么说,这些题就是想得出来就想得出来,想不出来就是想不出来
A. [ABC261Ex] Game on Graph
假设图是一个有向无环图,那么直接 DAG 上 dp 即可。轮到 Alice 时在所有后继节点中取最小值,轮到 Bob 时在所有后继节点中取最大值。
考虑有环。有环的 min/max dp 的经典解法是跑最短路,把无后继的节点入堆,建反图,跑 Dijkstra 就好了。
但是这个 dp 有时候取最大值,有时候取最小值,感觉比较难处理。
如果轮到 Alice,直接取最小值。因为 Dijkstra 用小根堆,所以 Alice 的 dp 值直接跑 Dijkstra 是正确的。
如果轮到 Bob,则要所有的后继节点更新后,才可以更新 Bob 的值。而且他是希望在博弈中跑出死循环的,所以如果不是所有的后继节点都更新得到,他就不更新。我们可以使用类似拓扑的方式处理。记录入度,松弛时入度减一。
B. [AGC048D] Pocky Games
先说结论:A、B两人每次要么取一个,要么全部取完。
感性证明一下:
如果某一方对应的那堆石子大于其余的之和,那么其必胜,否则他会弃掉这堆去抢后面的。
但是如果直接弃掉的话可能会输,所以要先一个一个的拿来拖延对面的时间,等时机到了就全部丢掉。
于是有:设 \(f_{i, j, k}\) 表示 \([i, j]\) 内 A 先手,第 \(i\) 堆是 \(k\) 是否能获胜。
发现当 \(x\) 能获胜时,\(y\ge x\) 的 \(y\) 也能获胜,所以改成 \(f_{i, j}\) 表示最小获胜的 \(a_i\),\(g_{i, j}\) 反之。
考虑 A 的策略,假设求的是 \(f_{i, j}\)。
A 一开始会一个一个的丢,B 为了让 A 剩下的尽量少也会一个一个的丢,直到 \(a_j=g_{i +1, j}\) 之时,如果这时 B 继续丢,那么 A 可以直接丢掉 \(a_i\) 然后 B 就输了。
所以 B 会在 \(a_j = g_{i + 1, j}\) 的时候丢掉 \(a_j\),然后变成 \(f_{i, j - 1}\) 的情况,如果这时 \(a_i\ge f_{i, j - 1}\) 就可以赢。
复杂度 \(\Theta(T\cdot n^2)\)。
F. 多边形之战
如果这个三角形三个顶点相邻,则先手必胜(第一刀就可以切)
否则当黑色三角形只有一边与白色三角形相邻时才可以被切,显然那个白色三角形是最后一个白色三角形
于是转化为:有 \(n\) 个石子,一次只能取一个,问取最后一个的人是谁
做完了。
G. [BZOJ2463 中山市选2009] 谁能赢呢?
先说结论:\(n\) 为偶数则 Alice,为奇数则 Bob。
证明:以 \(n\) 为奇数为例,去掉起始点还剩下偶数个点,一定存在一种方法能将剩下的偶数个点分成若干个 \(1\times 2\) 的长方形。
那么对于每一轮操作,只要先手能走即先手能找到一个 \(1\times 2\) 的长方形,那么后手就一定能从长方形的这一端走到那一端。
所以只要先手能走后手一定能走,后手必胜。
对于 \(n\) 为偶数的情况同理。

浙公网安备 33010602011771号