博弈论蓝紫黑

树上博弈

Game On Tree 3

二分答案 \(mid\)

考虑 dp。

\(f_u=\max(\sum_{v\in son_u}f_v-1,0)+[a_x\ge mid]\)

直接转移即可,合法仅当 \(f_1\ne 0\)

Submission

哈利波特与死亡圣器&LUK-Triumphal arch

二分答案 \(mid\)

考虑 dp。

\(f_u=\max(\sum_{v\in son_u}f_v-mid,0)+1\)

直接转移即可,合法仅当 \(f_1=1\)

Code

Game on Tree 2

\(r_x\) 为根节点到 \(x\) 的中位数。

\(f_{x,0}\) 表示现在为先手,得分最大值。

\(f_{x,1}\) 表示现在为后手,得分最小值。

如果 \(u\in leaf\),则 \(leaf_i=1\)

则有转移

\[\forall leaf_u=1,f_{u,0}=f_{u,1}=r_u \]

\[f_{x,0}=\min_{v\in son_u}f_{v,1} \]

\[f_{x,1}=\min_{v\in son_u}f_{v,0} \]

\(r_x\) 可以直接用平衡树求。

Summission

另一侧的月

通过观察出以下结论:

  • 若所有节点的度数都为奇数,则先手必败。
  • 反之先手必胜。

考虑证明。

设先手必败态为 N,必胜态为 P。

  • 则有 N 的后继状态均为 P。
  • P 的后继状态含有 N。

由于原树中的度数都为奇数,则删掉一条边之后的联通块的根度数为偶数,N 的后继状态均为 P 成立。

由于一棵树仅有有限个度数为偶数的节点,所以钦定一个度数为偶数的点,它的一棵子树中有且仅有奇点。(假设子树中仍有偶点,那么就指定这个点为根)。

Code

Black and White Tree

看题解区都写的好麻烦。

如果一个叶子节点的父亲被染白,则其必然是黑色点,相当于删去这两个节点,这样显然是最优的。

不断执行操作。

如果还有点没有被删除,则先手获胜。

否则后手获胜。

Submission

Tree Game

如果 \(a_u \le a_v\),则 \(u\rightarrow v\) 是不优的,显然后手可以执行 \(u\leftarrow v\),则先手必败(因为最优策略无法获胜)。

则可以建边,权值大的指向权值小的。

如果一个点是必胜状态,仅当存在可以到达的点是必败状态(因为转化后树是单向边)。

\(a\) 的大小排序,直接转移即可,时间复杂度 \(\mathcal O(n)\)

Submission

最优化

Fox and Card Game

\(\text{Difficulty:}2000\)

首先,A 会取牌堆牌的前 \(\lfloor\dfrac{n}{2}\rfloor\) 张牌,B 会取牌堆牌的后 \(\lfloor\dfrac{n}{2}\rfloor\) 张牌。

  • 若第 \(i\) 堆牌为奇数,则将其插入大根堆。
  • 若第 \(i\) 堆牌为偶数,则不进行计算。

最后两个人轮流取大根堆里的值。

直接模拟即可。

Submission

Thanos Nim

\(\text{Difficulty:}2000\)

结论:

  • 最小堆的个数大于 \(\dfrac{n}{2}\),先手必败。
  • 反之先手必胜。

若最小堆的个数大于 \(\dfrac{n}{2}\),先手必然会选到至少一个最小堆,此时最小堆数量必然小于 \(\dfrac{n}{2}\),此时后手选择非最小值的 \(\dfrac{n}{2}\) 堆石子,把它们变为最小值,此时回归原状态,先手必败。

反之可得先手必胜。

Submission

A Coin Game S&A Coin Game

优化不是很好想。

\(f_{i,j}\) 为上一轮取了 \(j\) 枚,还有 \(i\) 枚的先手最大值。

则有转移 \(f_{i,j}=\max_{k\le 2j} \sum_{l=1}^ia_i-f_{i-k,k}\)

显然可以优化到 \(n^3\) 的复杂度,但无法通过此题。

由于 \(f_{i,j}\)\(f_{i-1,j}\) 差不多,令 \(k=2j-1\),则有 \(f_{i,j}=\max(f_{i,j-1},f_{i-k,k},f_{i-k-1,k+1})\)

Code

九省联考 2018 一双木棋 chess

发现对当前状态有用的状态不会太多(一个类似楼梯的形状),最多 \(C_{n+m+1}^{n}\) 种情况。

于是状压记忆化搜索即可。

压的是 \(11\)

Summission

CF1628D2

先说 D1 做法。

\(f_{i,j}\) 表示 \(n=i,m=j\) 时的答案。

\(f_{i,i}=ik\)

如果 Bob 选择的数字为 \(x\),则 \(f_{i,j}=\min(f_{i-1,j}-x,f_{i-1,j-1}+x)\)

这时选择 \(x=\dfrac{f_{i-1,j}-f_{i-1,j-1}}{2}\),这时 \(f_{i,j}=\dfrac{f_{i-1,j}+f_{i-1,j-1}}{2}\),是最大值。

答案即为 \(f_{n,m}\),时间复杂度 \(\mathcal O(n^2)\),可以通过 D1,D1Submission

D2 做法:

考虑枚举每个 \(f_{i,i}\) 的贡献。

首先会经历 \(n-i\) 次变为 \(\dfrac{1}{2}\),也就是 \(\dfrac{1}{2^{n-i}}\)

在考虑会加几次贡献。

发现相当于站在 \((i+1,i)\) 点(因为走到 \((i+1,i+1)\) 会算重贡献),每次可以变为 \((i+1,j)\) 或者 \((i+1,j+1)\),问到 \((n,m)\) 的方案数。

由于一共会走 \(n-(i+1)\) 次,选择 \(m-i\) 次给 \(j\) 加一,利用组合数可以求得方案数量为 \(\binom{n-i-1}{m-i}\)

结合 D1 做法,答案为 \(k\sum_{i=1}^ni\binom{n-i-1}{m-i}\)

时间复杂度 \(\mathcal O(n\log n)\)(更优秀的组合数预处理可以 \(\mathcal O(n)\)),可以通过 D2,

D2Submission

序列

Decrementing

  • 若序列中含有一,则答案可以通过判断 \(\sum_{i=1}^na_i\) 的奇偶性来判断。
  • 若序列中有奇数个偶数,则先手必胜。

最优策略是:选一个偶数,由于原序列中的最大公约数是 \(1\),则必含有一个奇数,所以后手只能改变一个一个数的奇偶性,先手仍处于必胜态。

  • 若序列中有偶数个偶数,则分情况讨论:
  • 若有至少 \(2\) 个奇数,则后手必胜,先手无法改变全局 \(\gcd\)
  • 否则先手操作唯一一个奇数,然后将该序列扔给后手操作。

由于操作次数不会超过 \(\log W\) 次,算上 \(\gcd\) 的复杂度为 \(n\log^2W\)。其中 \(W\) 为值域。

Submission

转化

AGC002E Candy Piles

\(a\) 递减排序,以下以 \(a=\{7,7,7,6,4,4,4,2,2\}\) 为例。

图片来自官方题解。

问题可以转化为在网格图上走。

操作一相当于往右走一格,操作二相当于往上走一格。

走到边界时输。

用必胜/败填充网格得到上图,表示当轮到我时已经在该位置时必胜/败。

观察得到同一对角线上的点的胜负态一样,且除原点对角线外相邻对角线的状态相反。

则可以快速求原点的胜负态,见右图。

Submission

人人尽说江南好

首先有结论:答案肯定会分为一堆 \(n\bmod m\)\(\lfloor \dfrac{n}{m}\rfloor\)\(m\),操作次数为 \(n-\lfloor \dfrac{n}{m}\rfloor -[n \bmod m\ne0]\)

证明较易。

具体的,判断先手合成两个 \(1\) 或者合成 \(\max\)\(1\)

其实就是巴什博弈。

Code

Giant Graph

首先 \(10^{18}\) 很大,所以我们优先选取 \(x+y+z\) 最大的点。

\(x+y+z\) 从大到小选择即可。

但是时间复杂度为 \(\mathcal O(n^3)\)

给边定向,边从小连到大,那么整个图就是一个 DAG

发现对于每个点 \(i\):

  • 如果 \(i\) 的出边被选了,则不能选择 \(i\)
  • 如果都不能被选或者 \(i\) 没有出边,选择 \(i\)

这和博弈转移一模一样。

答案为必败点的权值和。

容易发现每一张图都是独立的(每次相当于换一张图或者说换一维操作),SG 记为 \(A_{0,i}\)\(A_{1,i}\)\(A_{2,i}\)

则答案为 \(\sum_{A_{0,i}\operatorname{xor} A_{1,j}\operatorname{xor} A_{2,k}=0} 10^{18(i+j+k)}\)

同时有一个很重要的性质:博弈转移图中的点的 SG 值的 \(\max\) 不会超过 \(2\sqrt m\)Proof

于是枚举 \(A_{0,i},A_{1,j}\) 即可。

时间复杂度 \(\mathcal O(n+m)\)

Submission

椎名真昼

发现一个人若在本次操作不能获胜,则在下一次操作时仍然不能获胜,因为对方重复他的操作即可。

问题转化为:

  • 若 Alice 能直接获胜,Alice 胜。
  • 若 Bob 无论 Alice 怎么选都能获胜,Bob 胜。
  • 否则必然平局。

考虑判断这个问题。

现将原图缩点,若一个环中存在异色点,我们直接判断平局,因为无论如何操作必然仍存在异色点。

找到任意一个黑色点对其进行操作,若可以,则 Alice 获胜,否则 Alice 无法获胜。

记入度为 \(0\) 的节点为“根”,因为图中无环,则。

则若有至少一个根为白色,则 Alice 必然操作该节点导致 Bob 也必然操作该节点,所以 Bob 在此时必胜仅当所有点都是白色。

若所有根节点均为黑色且存在至少两个根,则 Bob 必胜仅当 \(n=2\),因为若 \(n>2\),Alice 可以选择一个非根节点使得 Bob 无法一次操作两个黑色根节点。

若所有根节点均为黑色且存在一个根,所以根与所有节点联通,则 Alice 可以操作某个根节点以外的点使得图中节点不是全黑,如果只有两个点,一黑一白,黑点连向白点,则 Bob 必胜。

Alice 的选点策略如下:

  • 若出度为 \(0\) 的点为黑色,则直接选择该点。
  • 否则选择出度为 \(0\) 的点的父亲。

这也解释了为什么有 Bob 的必胜态情况。

代码先咕咕着,有时间和精力再去写。

SG & Nim

小约翰的游戏&John

证明先咕咕着。

结论是特判 \(1\) 的 Nim 游戏。

Code

新Nim游戏

首先先手必胜,因为实在不行可以只剩下 \(1\) 堆。

我们对于剩下的情况,从大到小考虑每个数。

如果将其插入线性基失败,则说明去掉它可以使异或和为 \(0\),则我们需要在第一轮取走。

Code

KAM-Pebbles

本题为经典的阶梯博弈变种。

因此先引入阶梯 Nim 问题。

阶梯 Nim 问题是指,有 \(n\) 堆石子,每次我们可以从第 \(i\) 堆的石子中拿走一部分放到第 \(i-1\) 堆中,或者把第 \(1\) 堆中的石子拿走一部分,无法操作的人算输。由于在偶数位置移先手可以将其继续移到偶数堆,对奇数堆没有影响,因此阶梯 Nim 的游戏结果与只看奇数堆的石子数的普通 Nim 结果相同。

再看本题,可以对石子堆数进行差分,取走一堆相当于将一些石子挪到 \(i+1\) 堆中,因此与阶梯 Nim 游戏相反。

Code

Cnoi2019 人形演舞

有结论 \(\operatorname{SG}(i)=i-2^{\operatorname{highbit}(i)}+1\)

可以在 \(\mathcal O(m\log m)\) 复杂度内求出所有 \(\operatorname{SG}\) 值。

\(c_i\) 表示 \(\operatorname{SG}(j)=i\) 的个数。

选择 \(i\) 个数使它们的异或和为 \(j\) 的方案数记为 \(f_{i,j}\),则有转移 \(f_{i,j}=\sum_{a\operatorname{xor} b=j} c_bf_{i-1,a}\),答案即为 \(\sum_{i=1} f_{|V|,i}\)

这样的话,发现每次都可以进行 FWT,但是效率不够优秀。

可以先 FWT 一次,做快速幂 \(m\) 次,最后 FWT 回来即可。

这部分的时间复杂度为 \(\mathcal O(m \log |V|)\)

综上,总的时间复杂度为 \(\mathcal O(m \log m+m \log |V|)\)

Submission

posted @ 2024-03-28 16:40  WhisperingWillow  阅读(14)  评论(0编辑  收藏  举报