闲话

±0……
虽然编曲是不错
但是多次实践证明 我确实听不惯 pepoyo 的歌
有一种奇怪的感觉就是了
感觉听的时候不寒而栗?

今日推歌:世末歌者 - COP feat. 乐正绫
AI 版也很好听的!

模拟赛题解

好我也成了每天闲话写题解的人了……

但是 jiangly round 的思维量确实不小啊

T1 装备

你需要的就是最小化一个 \(n\) 进制数。
由于这个限制条件都是在两个数之间的,考虑构图。假设最开始有一对 \((a_i, b_i)\),我们连 \(a_i\to b_i\) 的有向边。发现最后会组成一系列联通分量,我们需要的就是给一些边重定向使得数最大。

可以发现如果分量里成了环就无法再动了,因此只需要考虑是一棵树的形式。这棵树也是个内向树,我们可以做的就是把根的位置向邻接点挪动,每次挪动花费 1。贪心地去作即可,每次只需要得到子树内一条合法的链,过程中需要维护链方向翻转。这样做的复杂度为 \(O(n)\),也可以看作路径加路径查最大值,树剖或 lct 的其中几个操作维护即可。

T2 比赛

首先有一个观察:对一个区间 \([l, r]\) 我们肯定可以确定一条分界线,使得 \([l, r]\) 段最后一次决斗的选手是分界线左右两个子区间的胜者。因此枚举区间和分界线就可以做到 \(O(n^5)\)
我们可以只枚举一侧的胜者,并维护另一侧整个区间与不在同一区间的选手决斗后后者胜利的概率。转移可以直接枚举一侧的胜者和另一侧都输给他的概率,最后乘以区间长度的逆。做完这个后维护概率就简单了。可以做到 \(O(n^4)\)
我们可以只枚举分界点,分界点处选手成为最终胜者当且仅当他是左侧胜者且是右侧胜者。这个可以自然拓展一格。我们可以维护 \([l,r]\) 区间内两端选手都没输的概率 \((l, r)\) 和左侧 \([l, r)\) /右侧 \((l, r]\) 输了的概率,最终 \(k\) 是胜者的概率是 \([1, k)\times (k, n]\)
可以做到 \(O(n^3)\)

T3 取石子游戏

博弈论没学过啊 题解说啥我写啥呗

首先 \(m = 1\) 退化成多个 nim 游戏,可以对权值的桶作异或卷积,FWT 优化即可。
题解说多种颜色可以拆开处理,最终的 SG 函数值是每种颜色单独做的 SG 函数值的异或。假设现在石子颜色相同,第 \(i\) 堆石子有 \(a_i\) 个,并定义 \(a_i = b_i \times (m + 1) + c_i \text { s.t. } 0\le c_i < m + 1\),题解说这局面的 SG 函数值为

\[\left(\bigoplus_{i = 1}^n b_i\right)\times (m + 1) + \left(\sum_{i = 1}^n c_i \bmod (m + 1)\right)
\]

然后这个就可以作 FWT 了。需要注意的是,由于每对 \(b_i, c_i\) 是绑定的,我们需要开一个二维桶,在 \((b_i, c_i)\) 位置存放 \(a_i\),对桶的第一维元素作 FWT,第一维的元素间按照循环卷积作乘法。由于 \(m\) 较小,循环卷积可以暴力做。
最后各颜色的合并也是 FWT。
题解写的复杂度是 \(O(nC(\log C + m))\),其中 \(C = \max \{s_{i,j}\}\)