文章

ICPC2025 成都区域赛题解

A

l_i = 10\max(a_i-1,0)+5r_i=10a_i+5L=\sum l_iR=\sum r_i

那么 L > 1000R \le 1000 时无解。

\sum a_i10^9,先令 \text{ans}_i=10^6l_i,接下来只需在保证 \text{ans}_i < 10^6r_i 的情况下,将 \sum \text{ans}_i 调整为 10^9 即可。

B

首先容易想到一个状压 DP:记 f_{i,S} 表示前 i 轮,最后一轮使用过技能的集合为 S 的答案。

w(T,S) 表示从集合 T 变为集合 S 能打出的伤害(若 AP 溢出则为 -\infty),那么就有 f_{i,S} = \max\left\{f_{i-1,T}+w(T,S)\right\}

由于 (\max,+) 满足矩阵乘法的结合律,因此我们预处理出 w 矩阵,矩阵快速幂计算出 w^R 即可得到答案。

时间复杂度 \Theta((2^n)^3 \log R)

C

好题。

正着做要考虑船到岸的时候人是否到岸,比较复杂。

考虑倒着做。二分答案,此时只需 check 每个人是否能在他的到达时间之前将其送回对岸,由于倒着做时每个人都已经到达,无需等待,所以直接贪心即可。

时间复杂度 \Theta(n \log A)A 为答案的值域大小。

D

f_{i,j} 表示在进入第 3 步前得了 i 分,用了 j 个红球且红球后击打彩球均成功的方案。总共只有 121 \times 15 个状态,显然可以直接 dfs 预处理求出。

容易发现,一局游戏的得分一定可以由若干个 1/ + A 的 f + B 的 f + 最后在第 3 步的若干个彩球还原。

我们考虑暴力枚举开头 A 和 B 分别用了多少个 1/,以及最后若干个彩球的击打情况,此时我们可以得到 A、B 还需要的分数 s_A,s_B 以及剩余可用的红球数 R

我们再枚举 i \in [0,R],判断 f_{s_A,i}f_{s_B,R-i} 是否
均可行即可得到方案。注意特判最后能否将当前玩家 p 调整为正确状态。

时间复杂度 \Theta(T \cdot 15^32^6)

E(待补)

F(待补)

G

优先使用 m 次修改,每次修改均将一个数改为 k

剩余的部分假设还有 k,2k,3k,\dots,tk,那么显然还能进行如下的 1+\lfloor\frac{t-1}{2}\rfloor 次操作:

  1. \left\{k\right\}
  2. \left\{2k,3k\right\}
  3. \left\{4k,5k\right\}
  4. ……

注意实现细节。

H(待补)

I(待补)

J

直接判断每篇论文是否已经通过,若未通过经过申诉后的得分是否可以通过即可。

K(待补)

L

先不考虑树,我们直接考虑如何判断两个序列 a,b 是否同构。

\text{cnta}_i 表示 ai 的出现次数,\text{cntb}_i 表示 bi 的出现次数。

那么若 \text{cnta}_0 \ge \displaystyle\sum_{i=1}^n[\text{cnta}_i < \text{cntb}_i](\text{cntb}_i-\text{cnta}_i) (记为 \text{sum}_-)且 \text{cntb}_0 \ge \displaystyle\sum_{i=1}^n[\text{cntb}_i < \text{cnta}_i](\text{cnta}_i-\text{cntb}_i) (记为 \text{sum}_+),则 a,b 同构。

现在回到树上,我们用线段树维护子树的 \text{cnta},\text{cntb},以及 \text{sum}_-\text{sum}_+,合并子树时线段树合并即可。

时间复杂度 \Theta(n \log n)

M(待补)

许可协议:  CC BY 4.0