CSP 2025 游记
1. 前言
我站在 NOI 即将离去的酒店门口,不知因为自信还是对竞赛失望,说:“三个月,期中考试我一定要进年级前 30。”
于是接下来的三个月,尤其是开学后的两个月,我拼命地学习文化课。其中唯二的休息是暑假结束前放松了五天,以及十一去九寨沟玩。或许有些人认为都这样休息了怎么算“拼命地学”呢?其实我一直都不是一个很刻苦努力的人,而这样看似松弛的学习状态已经达到我的极限了。或许是精力不够,即“心力憔悴”,我一直以来总感觉达不到对学习本质的兴奋或者沉浸的状态,唯一驱动我学习的便是 NOI 结束时设的那个目标。我对知识非常较真,或者说批判性思维极度发达,导致学习时总有一种批判与被批判反复中的痛苦感,这是导致上面问题的一个因素。而且紧迫的时间导致我再也没有像以前一样写一些随笔抒发感情、缓解压力。与此类似的是开学后为了短期理科的利益我很少去读一些书了,这既导致了文科成绩的下降也让我一直处于紧绷的状态,无法放松。
综上分析,这三个月本质上是一种在强压下的一种异化、扭曲、无法长久的学习状态。我甚至没有体验过真正长久、脚踏实地的学习状态。从初二开始我基本上都是在停课和短期速成文化课中漂泊流浪的。所以我对未来很迷茫——三个月的学习已经让我感觉精疲力竭,这种状态又如何挺得过高三一年呢?在学校没有感觉到归属感,那除了学习我又能做什么来维持自己的状态呢?
上面的话写的有些消极,其实情况也没有这么糟糕,我的心态也没有很爆炸。这些文字可能只是我抑制情感很久之后喷涌而出的情绪而已。
CSP 就是在情绪压缩到极致、压力最大的期中考试前的周末发生的。
2. 初赛
初赛在北大附中考,学校的生态环境非常好,当我路过的时候看到几十只鸟飞起并消失不见。考试过程和去年类似,也是拼尽全力写完只剩 40min 睡觉了,睡觉好像还没睡着。不过最后一道补全代码题好像思想比较深刻,如果我自己做那题还未必能做出来。出成绩喜提 100 分。
3. 复赛
考前很不上心,上午还在复习期中考试,中午花了三分钟打了一下线段树 1 发现还会打代码,感动了。出发的时间有点晚,路上很堵,最后距离考试 15 分钟才进考场,很惊险。到达机位,发现是虚拟机,不愧是大专的设备水平。点击放大电脑死机了,找老师重启总共用了快 10 分钟,而且还不敢放大了。于是开考晚了 7 分钟,而且只能在虚拟机的小屏幕里写,很难受。回想起 2021 年的 NOIp 和 2023 年的 CSP 类似的经历,顿时感慨万千,历历在目的经历与情绪也过了好久了啊。这就是 OI 的魅力吗?顺着 OI 的线索可以串起六年以来的记忆。
开 T1。凭感觉直接贪心选择再从 \(>\dfrac{n}{2}\) 的选择中调整就是对的。写完过了大样例,用时大概 20min。
开 T2。看到题目就猜测 \(k\) 很小,实际的确很小,那就很容易了。枚举,发现对初始的 \(m\) 条边可以先跑一遍 Kruskal 只保留选择的边,于是接下来只需要对 \(O(k)\) 个长为 \(n\) 的边集归并了。那 \(O\left(2^k\cdot nk(\alpha(n)+\log k)\right)\) 是不是能过啊。哦,可以使用 meet-in-middle 继续压缩状态,就不用乘 \(k\) 了。好难写啊,感觉之前的做法确实能过,于是就写了。写出来发现 \(n\) 是极限数据的 \(\dfrac{1}{10}\) 的大样例就跑了 0.5s,然后发现 \(3 \times 10^6\) 的输入用了 0.4s。我大胆猜测是这个机子跑太慢了,测了一下极限数据 1.2s,那 CCF 肯定能过啊。于是不管了。
开 T3。考虑枚举左端点,接下来就是在 \(s\) 长度大于等于某值时看有多少个 \(s_1\) 是 \(t_1\) 后缀的前缀,\(s_2\) 是 \(t_2\) 后缀的前缀。根据长度只有 \(\sqrt{L}\) 个,考虑枚举长度,然后哈希判断。但是 \(L\le 5\times 10^6\) 真的能过 \(O(L\sqrt{L})\) 吗?感觉没准真能过,而且这题看上去很困难啊,不会其他办法了。之后又想了一个优化方法,是提取出无论如何完全需要匹配的那一段,看包含这一段的 \(s\),再从那些 \(s\) 的长度组成的集合中枚举长度。然而发现肯定会被全 a 串卡掉。不管了。
开 T4。这道题看起来就是要线性 dp,因为有 \(s_i\) 的限制,但是为什么对于 \(c_i\) 的限制不是单调递增的啊?如果是单调递增的话就可以使用经典做法——从小到大依次填,因为集合满足包含关系所以可选的个数直接减去之前填的个数即可。好困难,看看 A 性质怎么做。有了 A 性质就可以不用线性 dp 了,那么可以考虑按照每一段的长度从小到大插入序列,将 \(c_i>x\) 的限制容斥变成 \(c_i\le x\),再列一列式子,应该能推出来。但是怎么会这么难做啊?这仅仅是一个特殊性质啊。要不先打一个 \(n\le 18\) 的状压 dp 保底一下吧。诶,怎么过不了样例 2 啊?重读一下题,原来不录用的人数会累加,而不会因为上一个录用的人而重置啊!读错题的毛病是改不了了啊。那这样 \(c_i\) 的限制就单调递增了。那是不是容斥一下就做完了?这是何意啊。于是写了一下容斥,中间写着写着发现还要记录总限制个数,是四维的。当时并没有注意到记录钦定了多少个容斥了的是布尔值,而是发现录取人数减去钦定个数恰好就是 \(s_i=1\) 且没有记录限制的个数,再用总 \(s_i=1\) 的个数减去即可得到总限制个数。很神奇,改完顺利地过了样例。
回来看 T3。还是不太会啊,怎么会有两个字符串分别匹配的问题呢?于是开始写 \(O(L\sqrt{L})\) 的做法,希望能冲过去。写到一半突然发现,原来两个字符串分别匹配的问题可以将两个字符串压缩到一个字符串并直接匹配!这样就成了 AC 自动机的板子题了啊。冷静一下,怎么 AC 自动机复杂度带字符集?\(5\times 10^6\times 26^2\) 再一次爆了。那 SA 能不能做?可以用每个 \(s_i\) 在后缀排序中更新一段区间。看起来能做了,但是好难写,凭我现在的码力肯定写不出来。于是继续写哈希,但是意识到压缩这一点后常数小了很多,更有可能过了。大概还剩 20 分钟的时候写出来了,但是大样例挂了,而且跑的时间还很长。我把最后想出的那个优化删了,居然对了!于是也调出来了优化的错误点。然而大样例跑 4s。我发现最后的那个优化竟然是复杂度瓶颈,于是删除了竟然只跑了 1s 多。接下来我赶紧把 map 换成哈希表,还是跑了 1s,但是猜测实际能过。最后连哈希表的大小都没时间调了,还剩 3 分钟的时候交了这道题,再检查了一下剩下的题,就离场了。
估分是:\(100+(100-?)+(100-?)+100=400-?-?\)
4. 赛后
在考场见到了 ljz 学弟,他并没有想出 T4 但是也有 \(300+\) 的分数,很强了。外校学弟 xyz 也是 \(300+\)。其他人没怎么看到。
赛后又是陷入了现在比较反感的之前学习 OI 的状态——痴迷于看洛谷帖子,找代码,预测分数。又因为打 CSP 浪费了一个下午加晚上,对自己和时间的失去控制导致我又感到很难过。但是周日缓解了一些,应对失去的对自己生活的控制感的唯一办法就是做事,重新获得。
周三出了成绩,T3 真的冲过去了,很震撼。最终成绩就是:\(100+100+100+100=400\)。AK 过一次正式比赛,OI 生涯也算是圆满了。

浙公网安备 33010602011771号