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\) 为偶数的情况同理。


posted @ 2024-10-04 18:56  Leirt_Abu  阅读(38)  评论(0)    收藏  举报