2024-2025 XCPC 比赛游记

CCPCO

看了一下比赛要求,怎么这么多事儿呢。

决定用 csy 的电脑打比赛。然而 csy 的新电脑连 vscode 都没有,只有 bug 奇多的 Dev 5.7,烂中烂。试机赛最后 qlr 写完 C 没保存就编译运行,然后 Dev 爆了代码没了,遗憾离场。

快进到开场 45 分钟(至于前面的时间哪去了?喜报:出错了。重新加载。)开题,看 G 发现是网络流板子,H 不会做,但是一直没有机时,就去开 B,结果忘记阶乘挂了一发,唐。此时 qlr 上机写 D,我口胡完 F 之后和 csy 研究 C,完全想不到怎么 hack 假做法,结果丢给 qlr 一下就叉掉并给出了正确做法,牛。qlr 过 C 之后我开始写 F,并实现了除 NTT 以外的所有部分,让 csy 写 NTT(忘记带板子了),因为我写太慢了。调了一会之后过了。此时他们两个早就胡出了 H 的做法并认为这场必须阿克(qlr 很早就声称他会 A)。H 丢给擅长 ds 的 csy 写,交上去 T 了。qlr 写 A,我和 csy 瞪眼调试。我提出试一下所有 \(a_i = 0\),发现是因为复制节点导致 Treap 不完全随机,退化成 \(\mathcal O(n ^ 2)\),改掉就过了,痛失一血。最后大家一起做巨大细节题 A,+0 AC,下班。

B. 军训 II

给定可任意排列的序列 \(a_i\),求子区间极差和的最小值,以及取到最小值的排列个数模 \(998244353\)

\(1\leq a_i\leq 10 ^ 6\)\(1\leq n\leq 10 ^ 3\)

和最小当且仅当 \(a\) 升序或降序。考虑:若不大于 \(a\) 的数有 \(c\) 个,则最多有 \(c - k + 1\) 个长度为 \(k\) 的区间的最大值不大于 \(a\)。若不小于 \(a\) 的数有 \(c\) 个,则最多有 \(c - k + 1\) 个长度为 \(k\) 的区间的最小值不小于 \(a\)。升序和降序取到了最大值之和的下界和最小值之和的上界,且易证任何非升序或非降序的序列都做不到这一点。

时间复杂度 \(\mathcal{O}(n\log n)\)代码

C. 种树

给定一棵至少有一个黑点的树,每次可以选至少有一个黑点的大小为 \(3\) 的连通块染黑,求最小操作次数。

\(3\leq n\leq 10 ^ 5\)

最大化染黑两个白点的次数。因为两个白点之间的距离为 \(1\)\(2\),所以在距离不超过 \(2\) 的两个白点之间连边,树形 DP 求最大匹配即可。容易证明求出的匹配在调整后存在对应方案。

时间复杂度 \(\mathcal{O}(n)\)代码

D. 编码器-解码器

给定字符串 \(s, t\),设 \(S_i = S_{i - 1} + s_i + S_{i - 1}\),求 \(t\)\(S_{|s|}\) 以子序列形式的出现次数模 \(998244353\)

\(1\leq |s|, |t|\leq 100\)

\(f_{i, l, r}\) 表示 \(t[l, r]\)\(S_i\) 以子序列形式的出现次数 DP 即可。

时间复杂度 \(\mathcal{O}(|s||t| ^ 3)\)代码

F. 包子鸡蛋 III

给定字符串长度 \(n\) 和每个小写字母的出现概率 \(p_i\),求恰有 \(m\)egg 子序列的子串数量的期望值模 \(998244353\)

\(1\leq n\leq 5\times 10 ^ 5\)\(1\leq m\leq 1500\)

一个串是否是好串只和其 eg 序列的具体内容有关。

eg 序列的权值为 \(p_e ^ {cnt_e} p_{g} ^ {cnt_g}\),求长度为 \(i\) 且恰有 \(m\)egg 子序列的 eg 序列的权值和 \(a_i\),则 \(i\) 的长度为 \(\mathcal{O}(n)\) 级别。去掉开头的 g 和最后一个 g 及其两侧的 e,从后往前的每个 e 让子序列数量至少增加 \(1\),每个 g 让子序列数量的增加值至少增加 \(1\),所以这部分长度不超过 \(m\)。设 \(f_{i, j, k}\) 表示处理后长度为 \(i\),处理前子序列数量为 \(j\)g 的数量为 \(k\)eg 序列权值和,因为 \(k\)\(\mathcal{O}(\sqrt m)\) 级别,所以总复杂度 \(\mathcal{O}(m ^ 2 \sqrt m)\)

求出 \(f\) 之后容易 \(\mathcal{O}(n)\) 算出 \(a_i\)。设 \(P = 1 - p_e - p_g\),对于长度为 \(j\) 的子串,其 eg 序列长度为 \(i(i\leq j)\) 且合法的概率为 \(P ^ {j - i} a_i \binom j i\)。NTT 算出 \(c_j = \sum_{i = 1} ^ j P ^ {j - i} a_i \binom j i\),由期望的线性性,答案为 \(\sum_{j = 1} ^ n c_j (n - j + 1)\)

时间复杂度 \(\mathcal{O}(n + m ^ {2}\sqrt m)\)代码

G.

给定序列 \(a_i, V_i\),第 \(j\) 次操作要求给 \(V_{x_j}\)\(V_{y_j}\) 分别加总和为 \(W_j\) 的非负整数,求最终能否满足 \(V_i\leq a_i\)\(V_1 > \max_{i = 2} ^ n V_i\)

\(2\leq n\leq 10 ^ 3\)\(1\leq m\leq 10 ^ 3\)\(1\leq V_i\leq a_i\leq 10 ^ 6\)\(1\leq W_i\leq 10 ^ 6\)

先能给 \(V_1\) 加就给 \(V_1\) 加,得到 \(V_1\) 的最终值。此时可以知道每个 \(V_i\) 还能加多少,跑网络流即可。

时间复杂度 \(\mathcal O(\mathrm{Flow}(n + m, n + m))\)代码

ICPCO R1

喜报:出错了。重新加载。

开场看 F,猜结论结果挂了,发现左右两个数相同就爆了。后来铸币了想了好久,丢给 qlr 写又挂了两发,最后 F +4,乐死了。csy 上机写 H,发现费用流假了,让 qlr 写 L。csy 声称 H 要带权拟阵交,写不对,丢给我看,秒了,原来的建图稍微改改就行,唐。我和 qlr 研究 B,之后又研究 J。我们两个都不会写 min25,但是 csy 会啊。写完挂了,我和 csy 研究,变量改成 int128 输出不一样,一直没找到原因,交上去过了,发现是快读 read i64 里面写的 int,唐。qlr 读完 E 声称这是签到题,五分钟过了,离谱。随后 qlr 写 J,我和 csy 研究 D,发现 D 有点难写。qlr 过 J 之后只剩 45 分钟,最后发现根本写不完,摆了,下班。感觉 qlr 这场 super carry 啊,牛大了。

posted @ 2024-09-13 15:22  qAlex_Weiq  阅读(712)  评论(3编辑  收藏  举报