CSP-S 2026 游记

晨起日升拂澄窗,折影映人透暖光。

Day 0

和 Air , ylz 一起擦窗户。那面窗户自出生以来从未如此洁净。

坐了两小时大巴,竟然没有晕车,可喜可贺。

和 zzy 分在一个房间。

晚上和 zzy 打算出去吃饭,看到 一群人 聚在酒店大厅里,Air 说外面没饭吃,wjx 说不许吃串串,但是有人发了美味的截图和位置,于是屏蔽 Air ,顺着位置去了一家火锅店。而 一群人 在酒店大厅里玩 uno。

这是我最浪费的一次,不仅没有吃完,还没有打包。我以为 zzy 可以吃完的,但他也以为我能吃完。

Day 1

早上 6:00 自然醒(应该吧?),7:56 打算去吃饭,8:27 回到房间,

10:03-11:12 睡觉,

11:56 点外卖,12:20-12:40 吃午饭。

13:00 出发,路上有人说

先尝试一个小时做T1,做出来后再尝试一个小时做T2,做出来直接摆烂。

​ 做不出来尝试打暴力,打出来直接摆烂

T1做不出来再尝试用两个小时去做T1,做不出来直接摆烂。

那时没有人知道,这样摆烂可能拿不到一等。

到达后合影了。问 zwq 不会 KMP 怎么办,

用AC自动机。------me

似乎合影后被赶出去了,那么让我们采访一下第一位走出考场的大佬 Air !

好吧,没有真的被赶出去。我和 mxf 在一个考场,于是考场内只有二人。【其他人还在门(大门)外】

距离考试开始还有 一段时间 ,考场内只有 \(O(2)\) 个人,做一下心理建设。

距离考试开始还有 一些时间 ,考场内仅有 \(O(\frac{n}{2})\) 个人,想一下模板。

距离考试开始还有 一点时间 ,考场内才有 \(O(n-1)\) 个人,解压一下题,打开一下 D:\noi ------------?找不到?也许还没下发。

距离考试开始还有 -点时间 ,考场内已有 \(O(n)\) 个人,我的 noi 文件夹在哪里?什么?在 C: 里面?好好好。。。

Please wait while Setup is loading...

uppacking data: 71%

请支持 Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe。

设定编译器配置 Release -> Debug

工具T>编译选项C>编译时加入以下命令:

-std=c++14 -Wl,--stack=1234567890 -static

------终于,可以开始了。


Part I : crystal of lament(0~46min)

题面很简洁,不过是否太简单了?去年 club 也需要排列组合,这个 crystal 只有贪心?

考虑从下向上直接填补。哦,假了。

填补不一定从最低端开始,也可以是一段区间。

从上向下遍历将尽可能多的连续元素填平。似乎不是很好写?但这是T1,不写难道去写后面的?

于是写完了。

想到模拟赛中许多次因读题挂分,突然意识到元素排序的问题。样例都是升序,但题面...只字未提。

20min,又加了个 sort();

我好像会字符串操作(考前学的),不如写个手动格式化字符串,通过 system 批量高效检验样例。

40min,system参数要const char *?你怎么不去抢?

这无疑是失败的。

46min,手动测完了大样例,去看T2。

Part II : migrate by subway(46min~120min)

真是复杂的题面啊。经过阅读,我的心中渐渐有图的轮廓了。

地面站台可看作依附于站厅的,而一条线路又可被转化为一个点。

完全等价的,这是一个二分图(站厅/线路)。

\(5\times 10^5\) 条边,\(5\times 10^5\) 个询问,求两点最短路。

激烈的思考。。。画了 \(O(\infin)\) 个二分图。。。我好像对二分图一无所知,只会暴力Dijstra。

先写后面T3,T4的暴力吧,写完再回来安心想T2。

56min,看T3,简单的题面,简单的数轴,这种题放在T3必然来者不善。

不过特殊性质好像很强,想一下吧。

可能是因为我在平常模拟赛就习惯于T2不写写T3,这次T2又毫无思路,我就多想了一会儿T3。

77min,会 \(O(n^2)\) 了,可以预处理 \(fr\) 和 \(nex\) 表示节点 \(i\) 可以一次转移到的最左/右节点,双径岛屿对就是 \(u\in fr\^{t+1}_v,fr\^t_v\) 且 \(\sum_{p=1}^{t+1}\begin{cases}0&nex^p_u=fr^{t+1-p}_v\\1&nex^p_u=fr^{t+1-p}_v+1\\2&nex^p_u>fr^{t+1-p}_v+1 \end{cases}=1\)

的 \((u,v)\) 点对。可以用类似滚动数组的方法保存状态。

写之前看一下T4。。。树,毫无思路,特殊性质也不强,不打算写了,回来写T3。

120min,调好了T3暴力,虽然大样例根本测不出 \(O(n^2)\) 。

Part III : migrate to the other side(120min~190min)

这(T3)可是 \(2\times 10^6\) 的数据范围,正解要有 \(O(n)\) 吧。

思考了一段时间,线性定然是不能对每个位置都转移一次的,应该是枚举分隔点。

依照上文的式子,可分为三段(实际维护时可以省略一些状态和转移)。注意到一些性质,之后开始写。

180min,虽然写成了,但是大样例似乎有点TLE。

设定编译器配置 Debug -> Release

工具T>编译选项C>编译时加入以下命令:

-std=c++14 -Wl,--stack=1234567890 -static -O2

好吧,依然TLE 2秒多,常数这么大?但考虑到只剩最后一小时,又考虑到最后一小时必然不等价于一小时,只能祈求 CCF 评测机强,数据弱。

Part IV : subway rush(190min~240min)

190min,事到如今,先准备一下T1和T3的提交吧。

nzx\A.cpp -> submit\crystal.cpp

nzx\C.cpp -> submit\migrate.cpp

200min,发现可以利用 \(n\leq 500\) 跑全源最短路,但询问似乎还是会超时。还是打暴力吧。

我可以在40分钟内写完并调好T2 \(O(qm\log m)\) 吗?

220min,写完了,230min,调好了。至多只有 11/25 个点。

230min,又测了一遍T1,T2,T3大样例。

240min,还有人没提交?!

希望那个人最终交上了。


雨如针锋般刺下,于漆黑的夜空中。

出来后,"T2人均了?",好吧,我终究还是不擅图论。

那我辛辛苦苦打的两个小时的超时T3算什么?

返程的大巴上,听到 Air 说自己T3大样例1秒多,我突然想起,我好像不小心用了 lower_bound ,\(O(n)\rightarrow O(n\log n)\)。

在车上,和 zzy 一起欣赏了《花开凛凛满薰香》,在当下的环境,可算是超凡脱俗。

从郑州到焦作,雨一直下。

Day 2

附近的人似乎都是240+.....

回想一下,如果在多几十分钟,我或许能写出T2,或者发现T3的 lower_bound,甚至打T4的暴力。

如果我没有调那个可恶的 system ,结果可能会不同吧。明明都是退役前夕了,还这么鲁莽任性。

或许也有代码能力的原因,导致时间不足吧。模板的掌握,思维的熟练,都是我所欠缺的。

归来暮尽枯叶去,夜雨中,心寂空。

2026/11/2

Twightsetsun