happyguy 博弈论

这个博弈论是不含 SG 函数的 . 其实可能更像一个杂题选讲 .

Nim 游戏:\(n\) 堆石子,Alice 和 Bob 轮流选一堆石子取若干个,谁取不了谁输 .

结论:先手必败当且仅当所有石子的异或和为 0 .

关键结论:看成 DAG,如果一个状态只能转移到必胜,那么它必败 . 如果一个状态可以转移到必败,那么它必胜 .

如果有环:

  • 没有出边的状态必败 .
  • 从已知信息递推出尽可能多的结果:如果一个状态只能转移到必胜,那么它必败 . 如果一个状态可以转移到必败,那么它必胜 . 可以拓扑排序实现 .
  • 没有被递推出的状态平局,可以无限进行游戏 .

ABC261Ex Game on Graph

一张 \(n\)\(m\) 边的带权有向图,Alice 和 Bob 轮流操纵一枚棋子从 \(s\) 点出发,每次走一步,Alice 想要最小化边权和,Bob 想要最大化边权和,问最优策略下游戏的最终得分 .

\(n,m\le 2\times 10^5\) .

如果是 DAG 就是 Minimax 搜索型 DP:

\[\begin{aligned}&dp_{u,0}=\min_{v\to u}\{dp_{v,1}+w(u,v)\}\\&dp_{u,1}=\max_{v\to u}\{dp_{v,0}+w(u,v)\}\end{aligned} \]

其中 \(dp_{u,0}\) 表示 Alice 的得分,\(dp_{u,1}\) 表示 Bob 的得分 .

改进:\(dp_{u,0}\) Dijkstra,\(dp_{u,1}\) 拓扑排序 .

时间复杂度 \(O(m\log n)\) .

ARC143C Piles of Pebbles

\(n\) 堆石子,Alice 和 Bob 轮流拿,每次选择若干个堆,如果是 Alice 操作,则全部移走 \(x\) 颗石子,否则全部移走 \(y\) 颗石子 . 如果一名玩家不能操作那么它就输了,问最优策略下谁会赢 .

\(1\le n\le 2\times 10^5\) .

结论:把每堆石子对 \(x+y\) 取模答案不变 .

证明:考虑模仿,如果 Alice 拿了一些大于 \(x+y\) 的堆,那么 Bob 接着拿那一堆即可使石子数减少 \(x+y\) .

可以想一下什么情况模仿一定优 .

所有数都小于 \(x+y\) 的情况是朴素的 .

ARC131C Zero XOR

给一个长度为 \(n\) 的序列 \(\{a_n\}\),Alice 和 Bob 轮流操作,每次选一个数变为 0,如果操作后序列异或和为 0,则该玩家获胜,问最优策略下谁会赢 .

\(1\le n\le 4\times 10^5\) .

结论:\(n\) 是奇数一定先手必胜 .

证明:对于当前异或和 \(S\) 来说,如果有 \(S=a_i\) 那么先手必然必胜,否则只需要找到一个不存在 \(a_j\oplus a_i=S\)\(a_i\) 选那么后手必然赢不了,局面变为规模为 \(n-2\) 的更小局面 .

对于 \(n\) 是偶数,除了一击必杀肯定都是后手必胜,容易证明 .

AGC056D Subset Sum Game

黑板上写着 \(n\) 个整数 \(a_{1\dots n}\),有两个整数 \(L,R\) .

Alice 和 Bob 轮流操作,每次擦掉一个数,\(n\) 轮后,如果 Alice 擦掉的数之和在 \([L,R]\) 内,则 Alice 获胜,否则 Bob 获胜,问最优策略下谁会赢 .

\(2\le n\le 5000\)\(n\) 是偶数 .

通过一些不是很困难的转化可以变成下面的问题:

有一个整数 \(x\) 和一个序列 \(\{a_n\}\),Alice 和 Bob 轮流操作,每次 Alice 选一个 \(a_i\)\(x\gets x+a_i\),Bob 选一个 \(a_i\)\(x\gets x-a_i\),不能选重复的 . Alice 要最小化 \(|x|\),Bob 要最大化 \(|x|\),问最优策略下 \(n\) 轮之后 \(|x|\) 会是多少 .

\(v(a)\) 为将长度为偶数的序列 \(a\) 排序后 \((a_2-a_1)+(a_4-a_3)+\cdots\) 的值 .

那么如果 \(x=0\),答案的上界就是 \(v(a)\),事实上如果将权设为绝对值之差,这就是完全图的最小匹配 .

对于 \(x\neq 0\),取一个数 \(p\),加入 \(p,\,x+p\)\(v(a)\) 是答案的一个上界 . \(p\) 需要取使上界达到最小的 . 它的意思是 Bob 第一步选 \(p\),中间正常游戏,最后 Alice 选 \(x+p\),这样 \(x\) 就被累加到权值中了 .

为了分析双方的策略,并证明答案能取到上界,我们还需分析 \(n\) 为奇数的情形,此时做法类似,加入 \(p\)\(v(a)\) 即为上界 .

下面归纳证明答案等于上界:

  • \(n=1\) 时显然成立 .

  • 对于 \(n>1\),如果 \(n\) 是偶数,那么对于每个 \(x\) 可以让 \(x\gets x+a_i\),每种都可以通过取 \(p=a_i\) 实现 . 注意这里重复出现的两次 \(a_i\) 删去不影响结果 .

  • 对于 \(n>1\),如果 \(n\) 是奇数,注意到对于集合 \(S\) 中加入两个差为 \(d\ge 0\) 的数得到集合 \(S'\),有两条性质:

    • \(v(S)-d\le v(S')\le v(S)+d\) .
    • 如果 \(d\) 大于 \(S\) 的极差,那么 \(v(S')\ge d-v(S)\) .

    性质的证明是不困难的 . 下面分别应用两条性质得到最优策略:假设 \(x\) 的下标是 \(p\)\(p\) 是奇数,如果 \(p\neq 1\),取走 \(a_{p-1}\),否则取走 \(a_n\),这样就保持当前上界了 .

从而结论已经被证明,模拟过程即可,时间复杂度 \(\Theta(n^2)\),可以通过 .

posted @ 2023-08-16 06:55  Jijidawang  阅读(137)  评论(0编辑  收藏  举报
😅​