jiangly's blog

Blogs

The 4th Universal Cup. Stage 18: Grand Prix of Hongō 题解

2026-03-10 01:15:36 By jiangly

A. Apparently Make UTPC

考虑在 $C$ 当中 $A$ 和 $B$ 的位置关系,讨论每种情况,取其中字典序最小的即可:

  • $A$ 完全被 $B$ 包含:可以用 KMP 判断。然后相当于把 $B$ 和剩下的字符排列使得字典序最小,也就是考虑 $B$ 的开头字符 $x$ 和第一个不等于 $x$ 的字符 $y$,如果 $y>x$,则所有小于等于 $x$ 的字符都应该排在 $B$ 之前;如果 $y< x$,则所有小于 $x$ 的字符都应该排在 $B$ 之前。

  • $A$ 和 $B$ 不相交:也是把一些串排列使得字典序最小,一定是 $AB\le BA$ 时 $A$ 排在 $B$ 之前,剩下的字符和第一种情况类似。

  • $A$ 和 $B$ 相交:不妨设 $A$ 的后缀和 $B$ 的前缀相交。满足条件的前后缀可以对 $BA$ 做 KMP 求出。首先需要满足 $C$ 当中有足够的字符,也就是这个 border 的长度必须大于某个值。接下来考虑如何比较两个 border 做为相交部分的字典序大小关系:

    • 根据之前的分析,一定存在某个 $x$ 使得小于等于 $x$ 的字符会排在 $A$ 之前(注意这里事实上有 $A$ 所有字符相同的情况,这时候只需要看 $B$ 中第一个不等于 $A_1$ 的字符),所以如果两个 border 相差的部分中有小于等于 $x$ 的字符,则较长的 border 一定更优。
    • 设两个 border 分别为 $S$ 和 $ST$,$B=STX$,如果 $T$ 当中没有小于等于 $x$ 的字符,则只需要比较 $TX$ 和 $X$ 的字典序大小($X$ 可能是 $TX$ 的前缀,这时还需要往后比较,但这时多出来的字符一定可以拼出来等于 $TX$,所以选择 $X$ 不会更劣)。考虑 border 形成了 $O(\log |B|)$ 个等差数列,每一段当中要比较的串都形如 $T^kX$,字典序的最小值一定是在 $k$ 取最小或最大时取到。

      上述分析结合起来,可以得到统一的结论:当 border 长度满足字符数量的限制时,答案一定是在等差数列的端点处取到。

时间复杂度 $O((X+Y+Z)\log Y)$。还可以用 Z 函数实现 $O(1)$ 比较两个 border 的优劣(因为是 border,上面的 $S$ 一定是 $ST$ 的后缀,因此我们只需要比较 $STX=B$ 和 $SX$,其中 $SX$ 是 $B$ 的后缀,用 Z 函数即可 $O(1)$ 比较),做到线性复杂度。

B. Binary Tree Counting

有一个显然的 DP 做法是 $f(l_1,l_2,\mathrm{len})$ 表示先序编号在 $[l_1,l_1+\mathrm{len})$ 中的点对应中序编号 $[l_2,l_2+\mathrm{len})$,转移时枚举 $l_1$ 的中序编号,时间复杂度 $O(N^4)$。

观察:考虑二叉树和长度为 $2N$ 的合法括号序列的双射。合法括号序列可以唯一表示为 $(A)B$ 的形式,此时匹配的括号为根,$A$ 为根的左子树,$B$ 为根的右子树。在这个双射下,匹配的括号对应顶点,而第 $i$ 个左括号就是先序编号为 $i$ 的顶点,第 $i$ 个右括号就是中序编号为 $i$ 的顶点。问题转化为数长度为 $2N$ 的合法括号序列,满足第 $A_i$ 个左括号和第 $B_i$ 个右括号匹配。

我们可以根据 $A_i$ 和 $B_i$ 推出匹配括号之间的包含关系,建成一棵树,其中父亲包含孩子,孩子从左到右排序。在这棵树上树形 DP,求出 $f(x,i)$ 表示 $x$ 的子树内(通过添加一些括号)构成长度为 $2i$ 的合法括号序列(为了保证 $x$ 对应的左右括号是匹配的),且使得子树内的点都满足条件的方案数。对于每个 $f(x,i)$ 我们需要对所有孩子从左到右进行 DP,转移的系数就是两点之间向上或向右走且不能经过某条斜线 $y=x+d$ 的路径数,可以直接用组合数求出。

因为对孩子进行 DP 的复杂度是 $O(\mathrm{deg}_x\cdot N^2)$,所以总的复杂度是 $O(MN^3)$。但稍微分析一下会发现孩子的大小取值范围是有限的,如果相邻的两个孩子分别是 $(A_1,B_1)$ 和 $(A_2,B_2)$,那么 $(A_1,B_1)$ 的子树大小不能超过 $A_2-A_1-1$,$(A_2,B_2)$ 的子树大小不能超过 $B_2-B_1-1$,因此对一组 $(x,i)$ 进行 DP 的复杂度不超过 $O(\sum_{j}(A_{j+1}-A_j)(B_{j+1}-B_j))$。我们可以把它看成平面上的矩形 $[A_j,A_{j+1})\times[B_j,B_{j+1})$,会发现对于所有的 $x$,所有的矩形都是不交的,因此总的面积是 $O(N^2)$。还要考虑 $i$ 这一维,最终复杂度不超过 $O(N^3)$。

C. Convex Crusher

分类讨论凸包顶点数量 $m$:

  • $m\le 2$:所有点共线,一定合法。

  • $m\ge 4$:不合法。

  • $m=3$:如果存在顶点以外的两个点 $P_i,P_j$ 满足直线 $P_iP_j$ 不经过任何一个凸包顶点,则选择这两个点和直线一侧的两个凸包顶点就是凸四边形。继续讨论:

    • 如果凸包内所有点共线:合法。

    • 如果不共线,设三个不共线的点是 $O,G,H$。不妨设 $OG$ 和 $OH$ 分别经过了 $A$ 和 $B$,则不可能 $G$ 在 $OA$ 上且 $H$ 在 $OB$ 上,否则 $ABHG$ 是凸四边形;都不在也不行。不妨设 $G$ 在 $OA$ 上,$H$ 在 $BO$ 的延长线上,则 $C,H,G$ 必须共线,否则 $BCHG$ 或者 $CAGH$ 是凸四边形。再这个基础上加任何一个点都会不合法,因此唯一的情况如下图所示:

      image-20260309044637217

除上图的情况以外,合法的集合可以看成选择一个点 $O$ 和三个方向,满足这三个方向不在同一个半平面(可以刚好差 $180^\circ$),选一个方向的所有点和另外两个方向的至多一个点。枚举点 $O$ 和选择所有点的方向 $v$,则另外两个方向一定是在 $v$ 两侧分别和 $v$ 的距离尽可能远,可以极角排序后双指针,时间复杂度 $O(N^2\log N)$。

上图的情况可以枚举 $O,G,H$,检查三条延长线上是否都有点,判断延长线上是否有点可以预处理,时间复杂度 $O(N^3)$。

D. Divisible by 11

观察:在十进制下,从低位数的所有偶数位($10^0,10^2,\ldots$)的贡献是 $1$,所有奇数位的贡献是 $-1$,所以一个数模 $11$ 为 $0$ 当且仅当在模 $11$ 的意义下,奇数位的总和等于偶数位的总和。

先忽略首位非 $0$ 的限制,只需要再减去首位为 $0$ 的情况即可。设位数是 $N$,数字 $i$ 的出现次数是 $c_i$,数位和为 $s$,则要计算的就是 $$ \left\lceil\frac{N}{2}\right\rceil!\left\lfloor\frac{N}{2}\right\rfloor!\left[x^{\left\lfloor\frac{N}{2}\right\rfloor}y^{\frac{s}{2}\bmod 11}\right]\prod_{i=0}^{9}\left(\frac{1}{c_i!}\left(1+xy^i\right)^{c_i}\right)\bmod (y^{11}-1) $$ 注意我们先认为相同的数字是可以区分的,所以最后要除以 $c_i!$。模 $y^{11}-1$ 是因为总和是在模 $11$ 的意义下考虑的。

令 $F_i(x,y)=1+xy^i$,则关键的部分是求 $F(x,y)=\prod_{i=0}^9F_i(x,y)^{c_i}$。考虑对 $x$ 这一维递推,也就是对 $x$ 求导得到 $$ \frac{\partial F}{\partial x}=\sum_{i=0}^9 \frac{\partial F_i^{c_i}}{\partial x}\prod_{j\ne i}F_j^{c_j}=\sum_{i=0}^9c_i \frac{F}{F_i}\frac{\partial F_i}{\partial x}=\sum_{i=0}^9\frac{c_iy^iF}{1+xy^i} $$ 我们只需要同时维护 $F$ 和所有的 $\frac{c_iy^iF}{1+xy^i}$ 即可在 $O(10^2N)$ 的时间复杂度内计算答案。注意朴素实现的空间复杂度也为 $O(10^2N)$,但我们在递推中只需要保留最近的一项,可以优化空间到 $O(10^2)$。

E. Exchange or Not

观察:如果我们规定 $A_i=A_{i+1}$ 的时候不能交换,则每个不同序列对应唯一的操作方式。

现在相当于将原序列分成若干段,每一段的开头不断交换至结尾,因此要求段的开头只能出现一次。从后往前 DP,找到第 $i$ 个数右边第一个相同数的位置 $f_i$,则可以从 $[i+1,f_i]$ 转移到 $i$,用前缀和优化即可。时间复杂度 $O(N)$。

F. Finite Bracket Sequence

因为将左括号看作 $1$,右括号看作 $-1$ 时,合法括号序列总和一定为 $0$,所以当选择的区间总和非 $0$ 时,长度一定有上界。当总和等于 $0$ 时,端点选择前缀和最小值的位置即可找到任意长度的合法括号序列。只需要前缀和判断,时间复杂度 $O(N+Q)$。

G. Greatest Bracket Sequence

当长度有限时,设总和为 $s$,不妨设 $s>0$(通过翻转并取反),且除空前缀外的前缀和严格大于 $0$(通过循环移位)。这时如果一个子串跨过了两段的端点,则一定不可能是合法括号序列,因为端点之后的所有位置的前缀和都严格大于端点。因此这时合法括号序列子串直接就是原串的子串,不需要复制。

观察:这时极长的合法括号序列一定满足右端点是后缀最小值,左端点是下一个(靠左边的)后缀最小值 $+1$。

问题转化为了求所有后缀最小值之间的最大间隔,可以用倍增预处理后求解。注意上面考虑的都是循环移位之后的,实际我们可以看作将序列复制一遍之后求解,注意跨过端点的时候需要做一次特殊的询问($R$ 之前第一个前缀和等于 $x$ 的位置),也可以用倍增求解。时间复杂度 $O((N+Q)\log N)$。

H. Heyawake-like Problem

如果我们将 $i-j\equiv 0\mod 3$ 的格子涂黑,则每一行和每一列的黑格数量就是 $N$ 或 $N+1$,我们考虑在这个基础上调整一下使得白格联通,且黑格数量满足要求。

当 $N$ 是偶数时,可以先考虑 $N=2,4$ 的解分别如下:

#..#..#
.#...#.
..#.#..
#.....#
..#.#..
.#...#.
#..#..#
...#..#..#..#
.#..#..#...#.
..#..#..#.#..
#..#..#.....#
.#..#...#.#..
..#..#.#...#.
#..#..#..#..#
.#...#.#..#..
..#.#...#..#.
#.....#..#..#
..#.#..#..#..
.#...#..#..#.
#..#..#..#..#

也就是我们先将副对角线也涂黑,和副对角线相邻的格子涂白,此时所有 $i\equiv 1\mod 3$ 的行和列有 $N+1$ 个黑格,其余行列有 $N$ 个黑格。要满足黑格的数量,只需要把副对角线上除首尾以外的满足 $i\equiv 1\mod 3$ 的格子涂白,但这会导致黑格和边界不连通。我们改为把副对角线上满足 $i\equiv 4\mod 6$ 的格子以及 $i+j=3N-10$ 且 $i\equiv 1\mod 6$ 的格子涂白即可。

当 $N$ 是偶数时,上面的构造就不成立了,我们考虑递归构造。事实上 $N$ 是偶数的情况也可以看作是递归构造,我们参考 $N$ 是偶数的情况,可以得到以下的构造方式:

  • 如果有 $N$ 的解,满足倒数第 $7$ 行和最后一行是 $N+1$ 个黑格,并且这两行的第一个格子都是黑格,并且第一列和最后一行的黑格都在 $i\equiv 1\mod 3$ 的位置,我们在这个基础上向左和向下增加 $6$ 行和 $6$ 列,$i-j\equiv 0\mod 3$ 的格子用斜线铺满,其中左下角的部分用 $N=2$ 的解填充,最后将倒数第 $13$ 行的第一个格子涂白,就得到了一个 $N+2$ 的解且满足所有上述条件。

我们只需要找到一个合适的 $N=3$ 的解,例如:

#..#.....#
.#...#.#..
..#.#...#.
#..#..#..#
.#...#.#..
..#.#...#.
#.....#..#
..#.#..#..
.#...#..#.
#..#..#..#

I. Inversion Graph

J. Jelly

因为要求的是最大值,而幸福度也是取最大值,我们可以看作任选 $a-a'$ 和 $b-b'$ 的其中一个。这样的话所有食物有四种可能:$+a-a$,$+a-b$,$+b-a$,$+b-b$。也就是 $-a$ 之后必须是 $+a$,$-b$ 之后必须是 $+b$。

因为 $+a-a$ 和 $+b-b$ 的贡献都是 $0$,并且至少有一种可以插在任意位置,所以可以看作可以不选一些食品。剩下选了的食品一定是 $+a-b$ 和 $+b-a$ 交替,因此 $+b-a$ 的数量和 $+a-b$ 的数量至多差 $1$。把所有食品按照 $A_i-B_i$ 排序后,一定是最大的一些选 $+a-b$,最小的一些选 $+b-a$,并且一定是尽可能全选,因为如果剩至少两个,把它们选上的贡献是非负的。时间复杂度 $O(N\log N)$ 或者 $O(N)$。

K. Keep or Gamble

观察:最优策略是,设当前的分数是 $s$,把猫的分数看成 $-s$,则如果剩下的卡牌分数平均值为正选择操作 A,否则选择操作 B。

证明:操作 A 的贡献就是剩下卡牌的分数平均值,所以为正时一定选择操作 A。而注意到剩余卡牌分数总和一定是单调递减的,所以如果当前是负数,以后也是负数,所以选择操作 B。

分数为 $0$ 的熊猫可以直接忽略。最终答案可以看成每一步期望的总和,也就是 $$ \sum_{i=0}^U\sum_{j=0}^T\frac{{U\choose i}{T\choose j}}{U+T+C\choose i+j}\frac{\max\{0,2(U-i)+(T-j)-C(2i+j)\}}{U+T+C-i-j} $$ 枚举当前选了 $i$ 个独角兽和 $j$ 个老虎,乘积的第一项是到达这个局面的概率,第二项是这个局面下一次操作的期望。

枚举 $i+j=s$,则可以解出有贡献的部分是 $i\le t$,需要快速计算形如 $f(s,t)=\sum_{i=0}^t {U\choose i}{T\choose s-i}$ 的求和。注意到有递推式 $f(s+1,t)=\frac{f(s,t)\cdot (U+T-s)-{U\choose t+1}{T\choose s-t}\cdot (t+1)}{s+1}$。考虑组合意义,也就是在 $U+T$ 个物品里面选 $s$ 个,其中前 $U$ 个物品中至多选 $t$ 个。递推式的含义是,在选 $s$ 个的方案中,任意选择一个没选的物品,这时有可能导致前 $U$ 个物品中选了 $t+1$ 个,去掉这种情况后,剩下的每种方案恰好被算了 $s+1$ 次。由于限制 $t$ 关于 $s$ 是单调递减的,因此可以快速维护。还要计算形如 $g(s,t)=\sum_{i=0}^t{U\choose i}{T\choose s-i}i=U\cdot \sum_{i=0}^{t-1}{U-1\choose i}{T\choose s-1-i}$,维护方法和 $f(s,t)$ 一致。时间复杂度 $O(U+T)$。

N. Numerical Error

如果存在两个相同的数,则选择它们即可。否则所有数的总和不超过 $S=\sum_{i=1}^N\frac{1}{i}=O(\log N)$。枚举所有大小为 $\frac{N}{2}$ 的集合,如果集合数量至少是 $S\cdot 10^5+1$,则一定有两个的差不超过 $10^{-5}$。因此枚举足够多的集合,排序后判断即可。进一步发现有用的数的个数是 $O(\log( N\cdot 10^5))$,所以可以认为 $N$ 不超过 $O(\log (N\cdot 10^5))$。也就是可以认为 $N$ 不超过最小的 $N_0$ 满足 ${N_0\choose \frac{N_0}{2}}\ge H_{N_0}\cdot 10^5+1$,解出 $N_0=22$。

上面说明了当 $N\ge N_0$ 时一定有解,但我们还可以注意到,如果有解,则一定存在大小为 $\frac{N}{2}$ 的解:首先删除所有相同元素,这时大小不超过 $\frac{N}{2}$,然后添加一些相同元素即可。因此只需要枚举大小为 $\frac{N}{2}$ 的集合并排序,时间复杂度 $O(2^{N_0}\sqrt{N_0})$。也可以不排序,改为用大小为 $10^{-5}$ 的桶存放所有的总和,如果一个桶中有两个集合则找到一组解,否则最后只需要判断相邻的桶中的集合。

注意上述的复杂度都没有考虑比较,事实上存在极端数据使得两个集合的差值和 $10^{-5}$ 相差极小,但因为该题要求的是严格不超过 $10^{-5}$,理论上我们需要用精确的方法进行比较,这会带来至多 $\mathrm{poly}(N_0)$ 的因子。当然也可以先尝试用浮点数寻找不超过 $10^{-5}-\epsilon$ 的解,如果没找到再去判断浮点数差值不超过 $10^{-5}+\epsilon$ 的情况,实践中这并不会带来很大的开销。

The 4th Universal Cup. Stage 17: Grand Prix of St. Petersburg 题解

2026-03-03 23:59:07 By jiangly

A. Anthill/Honeypot Simulator

(注意,题解中的数学推导可能并不严谨。)

随机游走的结论是,两维的坐标是独立的,均值为 $0$,方差为 $\frac{T}{2}$ 的正态分布。即 $(x,y)$ 点的概率密度函数为 $$ f(x,y)=\frac{1}{\pi T}e^{-\frac{x^2+y^2}{T}} $$ 所求的概率即为 $f(x,y)$ 在一个半径为 $R$,圆心离原点距离为 $d$ 的圆内的积分。用格林公式得到上述积分等于 $\frac{1}{2\pi}\frac{1-e^{-\frac{x^2+y^2}{T}}}{x^2+y^2}(x\mathrm d y-y\mathrm dx)$ 在圆周上的积分。直接使用自适应 Simpson 积分在 $[0,2\pi]$ 上积分即可。注意当 $x^2+y^2\to 0$ 时,需要用到 $\frac{1-e^{-\frac{x^2+y^2}{T}}}{x^2+y^2}$ 的极限等于 $\frac{1}{T}$。

第二项则是上述的结果关于 $T$ 再做一个积分。如果再套一层自适应积分,效率可能太低,所以我们交换顺序,先对 $T$ 进行积分,然后进行相同的自适应 Simpson 积分。即要求 $$ \int_0^T \frac{1-e^{-\frac{r^2}{t}}}{r^2}\mathrm dt $$ 这个积分不是初等函数,结果是 $$ \frac{T}{r^2}\left(1-e^{-\frac{r^2}{T}}\right)-\mathrm{Ei}\left(-\frac{r^2}{T}\right) $$ 其中 $\mathrm{Ei}$ 是指数积分,可以用 C++ 标准库 `std::expint` 来计算。注意这个函数在 $r\to 0$ 时是发散的,因为当 $x\to 0$ 时 $$ \mathrm{Ei}(x)\sim \gamma+\ln|x|+O(x^2) $$ 但是其在 $x\in(-\epsilon,\epsilon)$ 处的积分是 $O(\epsilon |\ln\epsilon|)$ 的,我们可以合理地排除掉 $r^2$ 很接近于 $0$ 的部分。事实上,只要保证自适应 Simpson 积分时不会恰好命中 $r=0$ 导致算出 $+\infty$ 从而无限迭代,就能够计算出正确的结果。而考虑到浮点数自带的误差,不需要任何特殊处理也能够通过。

B. Missing Number

观察:只要值域大于数的个数,那么就一定存在一个数没有出现。

我们可以根据这一点对值域进行二分,二分的轮数恰好是 $\lceil\log_2(n+1)\rceil=8$。每一轮我们需要记录当前的左右端点以及在左半边的数的个数,总的状态数是 $O(n)$ 的,因此 $\log n$ 轮总共的状态数是 $O(n\log n)$。

C. String Workshop

观察:每次交换最左边的相邻逆序对,即插入排序,得到的就是最优解。

证明:设第 $i$ 个数左边比它大数的个数是 $c$,最终位置是 $j$,则它至少需要向左移动 $c$ 步,向右移动 $j-i+c$ 步,而插入排序一定是先左移再右移,是代价最小的。因此每个数的移动代价之和也是最小的。

上述的代价还可以用以下式子计算: $$ {n+1\choose 3}-\sum_{i=1}^n{c_i+1\choose 2} $$ 其中 $c_i$ 是第 $i$ 个数之前小于等于它的数的个数。可以考虑每个数先向左再向右,向左最终的位置就是 $c_i$,所以省掉了左边的部分。

因为值域(字符集)很小,用线段树维护区间中每个数的出现次数,出现次数前缀和,以及对于每个 $x$,所有满足 $s_i=x$ 的位置的 $c_i$ 和 ${c_i\choose 2}$ 之和,就可以在 $O(|\Sigma|)$ 的时间内合并。

对于修改操作 3,只需要打标记表示将区间依次赋值为 $a_1$ 个 $\tt A$,$a_2$ 个 $\tt B$,以此类推。打标记时也可以在 $O(|\Sigma|)$ 的时间内更新维护的信息。

总时间复杂度 $O((n+q\log n)|\Sigma|)$。

D. Distinguishable Distributions

当 $t=1$ 时,我们可以构造一个只产生 $\tt H$ 的分布,然后如果字符串是 $\tt T$ 就认为是均匀分布,否则不是。这样的做法有 $\frac{3}{4}$ 的正确率,是满足要求的。

当 $t= 3$ 时,$t$-close 对概率误差的限制缩小到了 $\frac{3}{8}$,这时如果我们仍然令 $n=t$,其中 $3$ 个字符串不会产生,剩下的均匀分布,是达不到预期的正确率的。事实上,如果我们事先决定好要询问的下标,则策略一定形如当 $S$ 属于某个集合 $T$ 时认为是均匀分布,否则是我们构造的分布,而根据 $t$-close 的定义,我们的正确率不可能高于 $\frac{1+2^{-t}t}{2}$。也就是说,我们的策略必须依赖已经询问得到的结果。

以下我们都考虑 $01$ 串而不是 $\tt HT$ 串。沿用 $t=1$ 的思路,我们希望在我们构造的分布中保证正确,而在均匀分布中达到 $\frac12$ 的正确率。如果不要求 $t$-close,只需要让 $t$ 个字符不独立,例如要求其中有偶数个 $1$。这可以看成先随机 $(t-1)$ 位,再直接让最后一位是 $0$ 或者 $1$。现在有这个限制,我们可以依赖之前的 $(t-1)$ 位来决定后面的某一位。具体的,令 $n=(t-1)+2^{t-1}$,我们先均匀随机 $(t-1)$ 位,这些位组成了 $2^{t-1}$ 位的二进制数 $x$,我们要求后面的第 $x$ 位必须为 $1$,其余位均匀随机。查询时同样先询问前 $(t-1)$ 位,再查对应的位是否为 $1$ 即可。接下来只需要证明这样构造的分布是 $t$-close 的。

证明:设生成的字符串 $s$ 前 $(t-1)$ 位为 $x$,则 $s$ 的第 $(t-1)+x$ 位必然为 $1$,我们将这一位设为 $0$ 得到字符串 $\bar s$,则 $s$ 和 $\bar s$ 两两匹配。因为 $p_s+p_{\bar s}=\frac{2}{2^n}$,和均匀分布一样,所以如果选择的下标 $i_1,\ldots,i_t$ 不包含 $(t-1)+x$,则这一对 $s$ 和 $\bar s$ 不会造成 $s_{i_1}\cdots s_{i_t}$ 在均匀分布和我们构造的分布中概率的区别;而如果下标包含 $(t-1)+x$,则当 $s_{i_1}\cdots s_{i_t}\in T$ 而 $\bar s_{i_1}\cdots\bar s_{i_t}\notin T$ 时会导致概率比均匀分布大 $\frac{1}{2^n}$。对每个 $x\in[0,2^{t-1})$,有 $2^{n-t}$ 对这样的 $s$ 和 $\bar s$,最多有 $t$ 个下标,因此概率至多差 $\frac{1}{2^n}\cdot 2^{n-t}\cdot t=2^{-t}t$。

E. Four Sages Around an Oak Tree

猜测时的信息总共只有 $4\cdot 3\cdot 3=36$ 种情况,因此策略也只有 $3^{36}$ 种。考虑直接搜索正确的策略,正确的策略需要在所有 $3^4$ 种情形中都存在猜测正确的位置。也就是说,如果有一种情形已经存在三个位置猜测错误,则最后一个位置必须是正确的,我们可以利用这一点进行剪枝。除此之外,搜索时优先搜索同一种情形中的不同位置的猜测,这样可以尽快利用上面的观察进行剪枝。经过剪枝后,已经可以在时限内搜出策略,但为了更快可以将策略直接编入代码。

搜索的结果还表明,不存在关于颜色轮换对称的策略,这也说明要手动构造一个策略是相当困难的。

F. Pluses and Minuses

从后往前 DP,设 $f(i,j)$ 表示当前长度是 $i$,加号个数和减号个数的差是 $j$ 的方案数。则转移是 $f(i,j)=f(i-1,j+1)+f(i-1,j-1)$,然后如果 $i-1$ 在集合中,则 $f(i,i-2)$ 增加 $1$。要求的则是所有 $f(2n,0)$。

令 $F_i(x)=\sum_{j}f(i,j)x^j$,分治计算 $\{F_i(x)\}$。假设当前分治到区间 $[l,r]$,则 $F_l(x)$ 次数大于 $r-l$ 的部分不会对区间中的答案产生贡献,因此只需要乘上 $(x+x^{-1})^{r-l}$ 加到 $F_r(x)$ 即可。剩下的部分递归处理,返回的值由两部分组成:$F_l(x)$ 传入的部分对于 $F_r(x)$ 的贡献,以及 $[l,r]$ 中间新增加的部分,两部分的长度都不超过 $O(r-l)$,所以每次递归只需要进行 $O(r-l)$ 长度的卷积,总时间复杂度 $O(n\log^2n)$。

另一个做法

我们设 $f(i,n)$ 表示加减号各 $n$ 个且后缀至少有 $i$ 个减号的串的数量,$F_i(x)=\sum_{n} f(i,n)x^n$,则我们要计算的就是 $$ \sum_{i\in S}(F_i(x)-F_{i+1}(x)) $$ 而我们可以推出 $$ F_i(x)=\left(\frac{1-\sqrt{1-4x}}{2}\right)^i\frac{1}{\sqrt{1-4x}} $$ 这个式子可以这样考虑:首先末尾的 $i$ 个字符是减号,然后每次我们往前找到最短的且加号恰好比减号多一个的段,这一段一定是合法括号序列;当找到 $i$ 段后剩下的部分只要加减个数相等就可以。然后结合卡特兰数的生成函数就能得到上式。

令 $A(x)=\sum_{i\in S}(x^i-x^{i+1})$,则我们要求的就是 $A\left(\frac{1-\sqrt{1-4x}}2\right)\frac{1}{\sqrt{1-4x}}$,这可以通过以下几个步骤完成:

  • 将 $A$ 右复合 $\frac{x}{2}$ 得到 $A\left(\frac{x}{2}\right)$。

  • 将 $A$ 右复合 $1-x$ 得到 $A\left(\frac{1-x}{2}\right)$,这一步只需要卷积。

  • 将 $A\left(\frac{1-x}{2}\right)$ 右复合 $\sqrt{1-4x}$ 得到 $A\left(\frac{1-\sqrt{1-4x}}2\right)$,令 $A\left(\frac{1-x}{2}\right)=A_0(x^2)+xA_1(x^2)$,则 $$ A\left(\frac{1-\sqrt{1-4x}}2\right)=A_0(1-4x)+\sqrt{1-4x}A_1(1-4x) $$ 仍然只需要卷积。

  • 最后卷积上 $\frac{1}{\sqrt{1-4x}}$ 即可。

时间复杂度 $O(n\log n)$。

G. Traffic Lights

因为 $v$ 已经是黄色,我们只需要找一个红色点和一个绿色点在 $v$ 的不同子树,并且距离最短。也就是只需要找到和 $v$ 距离最近的两个在不同子树的红色点和绿色点。$v$ 子树内的情况只需要用线段树维护 DFS 区间的最小深度。$v$ 子树外的情况可以用点分树维护(官方题解做法)或者树上动态 DP,使用树链剖分或者 LCT,时间复杂度 $O((n+q)\log^2n)$ 或者 $O((n+q)\log n)$。

H. Sweet Remainders!

观察:当 $n>1$ 时,度数序列 $\{d_i\}$ 合法当且仅当 $d_i\ge 1$ 且 $\sum d_i=2n-2$。

如果存在 $a_i=-1$,只需要度数的最小值之和不超过 $2n-2$ 即可。否则还需要满足最小值之和和 $2n-2$ 的差是 $m$ 的倍数。

构造完度数序列之后,按照度数从大到小,每次在之前的点当中为当前点选一个父亲即可。时间复杂度 $O(n)$。

I. Wooden Checker

检查第一个条件很简单,只需要无向图没有环并且每个点的入度不超过 $1$。

对于第二个条件,当加入 $u$ 到 $v$ 的边之后,假设 $v$ 可达的区间是 $[l,r]$,那么对于 $u$ 的每个祖先 $x$(包括 $u$),$x$ 在之前可达的区间必须与 $[l,r]$ 相邻。这也就是说,要么 $u$ 的子树包含了该连通块的最小值且最小值等于 $l+1$,要么包含了最大值且等于 $r-1$。考虑每个连通块的两条路径:从根开始不断走向编号最小(且比自己小)的孩子得到的路径 $L$ 和不断走向编号最大(且比自己大)的孩子得到的路径 $R$。上述条件也就相当于 $u$ 需要位于对应的路径上,加边之后路径上在 $u$ 之后的点会被删除,替换成 $v$ 的子树中对应的路径。

上述条件可以用并查集和链表快速维护,时间复杂度 $O((n+q)\alpha(n))$。

J. Euler Line

欧拉线上包含了外心、垂心、重心和九点圆的圆心,其中重心的坐标是容易求的:$G=\frac{A+B+C}{3}$。将重心的坐标带入直线的表达式得到 $$ k(A_x+B_x+C_x)+l(A_y+B_y+C_y)+3m=0 $$ 由于坐标是整数,我们能够立刻得到一个必要条件:$\gcd(k,l)\mid 3m$。接下来我们给出对于满足上述条件的任意情况的构造。

构造的思路是从一些已知的三角形和其欧拉线出发,通过相似变换,也就是旋转、缩放和平移,最终得到想要的直线。

为了保证坐标仍然是整数,我们希望最终的变换是以下的形式:

  • 先乘上矩阵 $M=\begin{pmatrix}p&-q\\q&p\end{pmatrix}$,其中 $p,q$ 是整数且 $p^2+q^2\ne 0$。这个 $M$ 表示旋转和缩放(考虑一般的旋转形如 $R_\theta=\begin{pmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{pmatrix}$)。
  • 然后平移 $(t_x,t_y)$。

我们希望从简单的直线,例如 $3x+r=0\pod{r=0,1,2}$ 出发,通过上述变换得到想要的直线。带入上面变换的结果,我们得到这个直线的方程应该是 $$ k(px-qy+t_x)+l(qx+py+t_y)+m=0 $$ 化简一下得到 $$ (kp+lq)x+(lp-kq)y+(kt_x+lt_y+m)=0 $$ 对比系数,可以列出方程 $$ kp+lq=3a\\ lp-kq=0\\ kt_x+lt_y+m=ra $$ 令 $g=\gcd(k,l),p=\frac{k}{g},q=\frac{l}{g}$,则第二个方程能够满足,第一个方程可以解出 $a=\frac{(p^2+q^2)g}{3}$。第三个方程化为 $$ 3pt_x+3qt_y+\frac{3m}{g}=(p^2+q^2)r $$ 我们只需要选择合适的 $r$ 使得 $(p^2+q^2)r-\frac{3m}{g}\equiv 0\mod 3$,然后再选择合适的 $t_x,t_y$ 即可。而因为 $\gcd(p,q)=1$,所以 $p^2+q^2\not\equiv0\mod 3$,因此一定存在这样的 $r$。

最后还有两个细节需要处理:

  • 找到欧拉线为 $3x+r=0$ 的三角形:只需要枚举所有坐标小的情况并检验即可。
  • 坐标范围:假设基础三角形坐标范围是 $O(1)$,乘上矩阵 $M$ 之后的坐标范围则是 $O(p+q)$;平移的时候找到合适的 $t_x,t_y$,例如当 $|p|>|q|$ 时优先让 $t_y$ 的绝对值尽可能小,可以使得最终的坐标范围是 $O(|k|+|l|+|m|)$。

K. Traversal of a Triangular Grid

可以直接把图建出来跑欧拉回路,或者手动构造:先一直走到左下,然后每一层先直线走到最右边,再沿着斜线走一条锯齿状的路径到左边的上一层。

如图所示:

image-20260303220402656

L. Triangles

观察:答案的上界是每一维的前 $\frac{n}{3}$ 大之和减去前 $\frac{n}{3}$ 小之和的两倍。

我们可以直接把所有坐标排序后三等分,变为 $0,1,2$,则要达到上界,每个三角形都必须包含横坐标为 $0,2$ 的点和纵坐标为 $0,2$ 的点。事实上我们可以做到每个三角形中横纵坐标的集合分别是 $\{0,1,2\}$ 的排列。我们只需要证明在每个横坐标的纵坐标的出现次数都是 $\frac{n}{3}$ 的前提下,能够选出这样的三个点,则递归构造即可。实际上这就是正则二分图完美匹配这个经典问题,结论是完美匹配一定存在。因此这个题目可以从三个点推广到任意 $k$ 个点。

实现时可以直接暴力枚举 $3!$ 种排列。时间复杂度 $O(n)$。

M. Construction Company

观察:一组工作能被 $a$ 个工人完成当且仅当任意时刻同时进行的工作数量不超过 $a$。

我们先把工作分配给清醒工人,满足以下两个条件:

  • 所有困难工作都被完成。
  • 每个时刻未完成的简单工作数量不超过 $b$。

我们用一条长度 $2m$ 的链表示时间,流过链上的边 $i\to i+1$ 表示一个工人在 $[i,i+1)$ 这段时间是空闲的。每个工作 $[l,r)$ 连边 $l\to r$,容量为 $1$;并且如果是困难工作,则这条边的下界也为 $1$。源点连向链首和链尾连向汇点的边容量为 $a$。

对于第二个限制,如果 $[i,i+1)$ 时间段有 $c_i$ 个工作需要完成,则其中至少有 $c_i-b$ 个需要被清醒工人完成,也就是说在 $[i,i+1)$ 这段时间空闲的工人数量不能超过 $a-(c_i-b)$,因此 $i\to i+1$ 的容量就是 $a-(c_i-b)$。

建图后跑一个上下界可行流,流量、点数、边数都是 $O(m)$,因此复杂度不超过 $O(m^2)$。

The 4th Universal Cup. Stage 16: Grand Prix of Warsaw 题解

2026-02-19 13:00:25 By jiangly

The 4th Universal Cup. Stage 1: Grand Prix of Korolyov 题解

2025-10-10 14:14:12 By jiangly

The 3rd Universal Cup. Stage 39: Tokyo 题解

2025-06-18 02:26:55 By jiangly
jiangly Avatar

jiangly