مدونة jiangly

المدونات

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

观察:当 $N>2$ 时,一个合法的排列恰好属于以下两者之一:

  • A:$P_1=2$,且删除 $P_1$ 并将大于 $2$ 的数减 $1$ 后是合法的排列。
  • B:$P_2=1$,且删除 $P_2$ 并将所有数减 $1$ 后是合法的排列。

因此恰好有 $2^{N-2}$ 种合法的排列,可以从 $[2,1]$ 开始每次进行上述 A、B 之一的逆操作共 $N-2$ 次得到。

我们把这个操作序列记作 $S$,则容易发现树的直径等于 $S$ 的连续段数 $+1$。

而 LIS 可以这样求出:设 $x,y$ 分别表示以 $P_1$ 和 $1$ 作为开头的 LIS 长度,则初始时 $x=y=1$,操作 A 会使得 $x=\max\{x+1,y\}$,操作 B 会使得 $y=\max\{y+1,x\}$。这个答案还可以用另一种方式求出:初始答案为 $1$,从 $S$ 的末尾开始,假设 $S$ 的末尾为 A,一直往前找,删除所有单独的 B,直到遇到连续的两个 B 或者 $S$ 的开头;如果在这之前遇到了 $k$ 个 A,则将答案增加 $k-1$,然后从连续的两个 B 开始继续往前重复这样的操作直到开头。这个算法的正确性可以考虑每一次操作之后 $x$ 和 $y$ 的大小关系。

上述的操作实际上把 $S$ 分成了若干段,如果我们把 $S$ 的最后一个字符复制一遍,则每一段形如 (AB?)*AA,最后开头可能有一个孤立的字符。例如 $\tt {\color{red}A}BABB{\color{red}AABABAA}$ 对应排列的 LIS 是 $1+(5-1)+(3-1)=7$。

我们用 $x$ 表示长度,$y$ 表示直径,$z$ 表示 LIS,则上述一段的生成函数是: $$ \frac{x^2yz}{1-(xz+x^2y^2z)} $$ 设 $f_{i,j,k}$ 表示长度为 $i$(也就是排列大小等于 $i+1$),直径为 $j$,LIS 为 $k$ 的操作序列数量,则其生成函数为: $$ \sum_{i,j,k} f_{i,j,k}=\frac{2(1+xy)yz}{1-\frac{x^2yz}{1-(xz+x^2y^2z)}}=\frac{2(1+xy)(1-xz-x^2y^2z)yz}{1-xz-x^2y^2z-x^2yz} $$ 注意上述生成函数在 $N=2$ 时不对,需要特判。

我们要计算的是关于 $y$ 的多项式 $$ \sum_{j,k} f_{N-1,j,k}y^jk^K $$ 我们对于生成函数分子的每一项分别求其贡献,主要难点是怎么处理分母。注意到分母可以写成 $1-xz-x^2z(y+y^2)$,我们令 $t=y+y^2$,则分母等于 $1-xz-x^2zt$,这相当于由 $xz$ 和 $x^2zt$ 构成的序列,我们枚举每一项出现了几次就能计算贡献。具体的,假设分子上是 $cx^iy^jz^k$,则这一项的贡献就是 $$ cy^j \sum_l l^K[x^{N-1-i}z^l] \frac{1}{1-xz-x^2zt}=cy^j\sum_{l}{N-1-i-l\choose l} t^l (N-1-i-l+k)^K $$ 最后的求和是一个关于 $t$ 的多项式,我们还需要带入 $t=y+y^2$。也就是将一个多项式 $f(x)$ 复合 $x+x^2$,因为 $x+x^2=\left(x+\frac{1}{2}\right)-\frac{1}{4}$,我们只需要依次复合 $x-\frac{1}{4},x^2,x+\frac{1}{2}$ 即可。复合 $x+k$ 需要一次卷积。

最终我们需要执行 $6$ 次这样的复合,总复杂度 $O(N\log N)$。但是这个算法的常数非常大,需要比较快的卷积板子还有常数优化。最显著的一个优化是利用 $y^2=t-y$ 将分子中的 $y$ 消成只有 $0$ 次和 $1$ 次项,然后将 $y$ 的次数相同的一起处理,这样就只需要 $2$ 次复合。

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)$。

L. Linear Floor

令 $a=\frac{A}{M},b=\frac{B}{M}$,则 $X_k=\lfloor ak+b\rfloor$,即 $X_k\le ak+b< X_k+1$。固定 $a$ 后转化为 $b$ 的限制即为 $X_k+ak\le b< X_k+1-ak$。

令 $y_{\min}(a)=\max_k\{X_k-ak\}$,$y_\max(a)=\min_k\{X_k+1-ak\}$,则 $a,b$ 需要满足的条件是 $y_\min(a)\le b< y_\max(a)$。

$y_\min(a)$ 和 $y_\max(a)$ 分别可以表示成不超过 $N$ 段的折线,这个折线可以用凸包求出。然后我们可以找出满足 $y_\min(a)< y_\max(a)$ 的区间,这个区间也被分成若干段,每一段中 $y_\min(a)$ 和 $y_\max(a)$ 都是一次函数。事实上我们可以证明这样的段只有 $O(1)$ 段,具体证明可以参考官方题解。

考虑如何计算 $M< M_0$ 的三元组数量,只要能计算该数量就能二分 $M$ 的取值。考虑每一段 $(a_l,a_r]$ 中有 $y_\min(a)=k_1a+l_1,y_\max(a)=k_2a+l_2$,枚举 $M< M_0$,则 $A=Ma\in(Ma_l,Ma_r]$,即 $\lfloor Ma_l\rfloor < A\le \lfloor Ma_r\rfloor$。$y_\min(a)\le b< y_\max(a)$ 等价于 $k_1A+l_1M\le B< k_2A+l_2M$,因此总数可以用下面的式子计算: $$ \sum_{M=0}^{M_0-1}\sum_{A=\lfloor Ma_l\rfloor+1}^{\lfloor Ma_r\rfloor} ((k_2-k_1)A+(l_2-l_1)M) $$ 这个式子可以用类欧几里得算法快速计算。

在得到 $M$ 的取值后,可以用同样的式子求出 $A$ 和 $B$ 的取值。时间复杂度 $O(N+\log ^2V)$,其中 $V=2^{30}$。注意求和的过程中涉及到的数非常大,需要使用高精度或者在模多个模数的意义下计算。

M. Max Conference

首先考虑怎么判断是否能使所有相邻字符不同(不考虑原串中本来就相邻的相同字符)。对于每一段问号,我们可以求出每种字符数量的上界。字符 $c$ 的数量上界即为 $\frac{r-l-[S_l=c]-[S_r=c]}{2}$,其中 $S_{l+1}$ 到 $S_{r-1}$ 是一段极长的问号。只要每一段的每种字符数量不超过上界,就可以用贪心的方式构造。因此这个问题可以转化为一个网络流问题,其中左边三个点对应 ABC,右边每个点对应一段问号,左边三个点限制容量 $X,Y,Z$,右边限制容量为问号数量,之间的边的容量即为每一段中每个字符数量的上界。能使得所有相邻字符不同当且仅当最大流等于问号的总数。最大流可以转化为最小割,枚举左边的点集,则所有询问的最小割可以在 $O(N+Q)$ 时间内求出。

进一步的,如果不能满足,则在一种排列方式中,一种字符的数量每超出上界(不取整)$1$ 个,则会多出 $2$ 对相邻的相同字符。我们可以在网络中左右两边之间加入额外的边,容量不限,费用为 $2$;对于本身上界为整数 $+\frac12$ 的边,再添加一条容量为 $1$,费用为 $1$ 的边。则最终的相邻相同字符数量就等于该网络的最小费用最大流的费用。由于该网络的性质,我们可以任意推单位费用为 $2$ 的流,因此我们只需要求出在最多能推流量为多少的单位费用不超过 $1$ 的流。这其实等于只考虑所有费用为 $0$ 或 $1$ 的边时的最大流。我们可以用之前同样的方式求出。总时间复杂度 $O(N+Q)$。

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

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

The 3rd Universal Cup. Stage 24: Poland 题解

2025-01-19 01:15:52 By jiangly

The 3rd Universal Cup. Stage 15: Chengdu 题解

2024-11-07 19:41:12 By jiangly

The 3rd Universal Cup. Stage 10: West Lake 题解

2024-10-04 22:24:42 By jiangly

The 3rd Universal Cup. Stage 9: Xi'an 题解

2024-09-10 21:31:13 By jiangly

The 3rd Universal Cup. Stage 7: Warsaw 题解

2024-08-25 21:10:44 By jiangly
共 15 篇博客
  • 1
  • 2