CSP-S 2025 游记

image

首先感谢洛谷 noip 计划的所有老师和学员,优质的课程对我这几个月的思维提升帮助很大。CSP-S 2025 的所有失误均是个人心态导致。

Day -7~Day-2

白天正常上 whk,晚修停课训练。逆天班主任居然还要追查我们的 whk 作业上交情况,于是整个白天到晚上 7:00 前都在为 whk 作业焦头烂额,太幽默了。
为了准备一段考已经有两周没写过代码了,感觉考前一周还是应该以恢复手感为主,于是基本上晚修都在随便补补之前模拟赛的题。
为了将思维从 whk 切换到 oi,每晚都读一下之前写的 noip 计划做题记录,对复健挺有帮助的。

题外话:物理好难,学不明白,oi 之外的时间基本上都在补物理。


Day -1

楼上机房有点吵,遂去楼下小机房和高三的呆在一起。聊得挺开心的,发现好像大家都不太会物理化学。

noip 计划做题记录读不完了,进度 60%。

觉得考前应该写点代码,于是把 CSP-S 2023 函数调用 又写了一遍。


Day -0.5

本来想睡久一点的,结果 6:30 自然醒了,在床上躺到了 7:45。醒来发现感冒好像又复发了,流鼻涕好难受(埋下伏笔。

翘掉了周六早上的物理化学课,直接打竞。

白天来到机房,觉得再看之前的做题记录没啥用了,于是开始默写模板,2h 把 tarjan 四件套和 kmp 和树链剖分的模板题都写了一遍。

昨晚只睡了 6.5h ,好困,好累。

考点依然是我的母校松湖莞中,想早点进去到学校里面转转,就不跟学校大巴了。
进入学校后,处处都点缀了和一年前记忆中不同的新意,但大量绿植散发的负离子依旧让我产生了难以言表的熟悉与安心感。到处看了看,操场翻新了,蓝色跑到不掉色了,变得更加明亮;生物园没啥变化,那些熟悉的树木都在,只是孔雀少了两只雄的,只剩下一只母的了,有点怅然;走到湖边,心旷神怡,欣喜发现三只黑天鹅居然离我那么近,完全不怕人,狠狠拍了好多照片(以前上学的时候还只有两只的,现在居然多了一只)。

e4d3b6a99cdcea24cc8dc8775ce0e650

00086afe85a2dad63867d24977c24b45

078e82a983554bb314b58380862317ec

faa4afbb381768712a77ac722eb76371

7c74da8d1659ebb2699aacd15ab672bc

7cfd44e0af92bbe1ac5a56f35b69bdb9

3de996340ab1be35d4815d30f6798fcc

是的,很美。我也该去考场了。

发现跟以前初中机房的朋友几乎都是同一个试室,大家变化都不大啊,聊了几句,开心。


Day 0

进到考场发现自己是极品座位,全场只有我这个位置被空调完全直吹,风大的离谱。考虑到 CSP2023 就是因为强忍着寒冷,结果考到后期直接肚子疼死了,于是这次严肃让监考老师关闭空调。

乐子:这次旁边做了一个很可爱的初中生,我一坐下来就问我多大了,我回高二;问我进过几次复赛了(?,我回四五次吧;然后又社牛的问了一堆七七八八的,感觉很可爱。然后我还教他了要把代码保存到 D 盘,他还问我做不出来题目之后能不能玩游戏之类的,我告诉他只要不影响其他考生因该可以(?,但我建议他睡觉。
不出所料,压缩包密码放出来之后,他确实不会解压压缩包,举手找了三次监考老师。
说句实话,一开始看他这么稚嫩,我还怕他考试时候会影响我,但后来他一直很安静,做完了就睡觉,倒也没啥,现在看来还真挺可爱的。


考前想了一下策略:今年是最后一舞了,再拼好分往高拿我觉得也太没意思了,而且我现在还挺享受思考 oi 题目的过程。于是这次我打算和之前都不一样,力求 AC,实在不行最后 1h 再考虑暴力和性质的事。是的,很激进。但我快乐。

开炫 T1。鉴于前两年 CSP T1 都很签到,于是我读完题目就基本上肯定这题是个简单贪心了。简单吗?很快就注意到 \(\frac{n}{2}\) 是个很特殊的东西,这意味着只要有一组的数量不低于 \(\frac{n}{2}\) ,那么另外两组的数量肯定不会超过 \(\frac{n}{2}\)。这性质已经强到爆炸了吧,只要我们将某个方案中,超过 \(\frac{n}{2}\) 的那一组给他降到恰好 \(\frac{n}{2}\),那么就可以不管具体的移动方式,最后的结果一定是合法的。
然后就简单贪吧,把每个数分到他价值最高的那一组,然后看看有没有哪组不合法,选择损失最小的几个元素从改组中挪走即可。因为涉及对差值的排序,所以有点像反悔贪心(?
没有调就过了大样例,显然今天手感在线,不想再复刻粤港澳第一题的痛苦经理了。
比赛已过 20min。

开炫 T2。光看题目就觉得应该比去年的超速检测要难。看完数据范围就知道复杂度大概是 \(2^k\) 再乘上个不超过 \(n\log n\) 的什么东西。答案显然存在上界,就是直接不管特殊点,直接在原图上跑最小生成树。然后考虑引入了特殊点后对答案可能的影响,大概猜到了特殊点貌似只会影响原图最小生成树上的边,但是原图的最小生成树形态不固定啊,又想了一下简单证明了不同最小生成树的形态好像并不影响。
于是做法差不多就出来了,最终答案肯定是对某个引入了特殊点的新图跑最小生成树,基本上可以确定要处理的图的边,一定不包含原本不在最小生成树上的边。也就是说原图中有意义的边树是 \(O(n)\) 级别的,再和特殊点引入的边合并一下新图的边树就是 \(O(nk)\) 的了。直接对新图克鲁斯卡尔的话感觉带 \(\log\) 的快排不太能过,但是考虑到可以转化为合并多个单调序列的问题,那么排序部分就可以做到线性了。
手模了一下样例感觉整个贪心都很对,直接开写了,就算错了也有机会重来。结果写完简单调了一下发现过了大样例,那应该是对了,run 了。
比赛已过 1.5h。

开炫 T3。根据题意每个询问好像只能经过恰好一次替换,并不复杂,确认没读错题后觉得这题是可做,开冲。想了一会后找到了关键性质,貌似 \(s\)\(t\) 都只需要关注出去最长公共前缀和最长公共后缀的部分,然后用个桶哈希计数一下就做完了(/ll 此时想假了但是我还没发现。以为 T3 又像去年一样是简单题,结果调了 0.5h 发现大样例一直过不去,又调了 10min 发现是做法假了——\(t\) 的最长公共前后缀对 \(s\) 的统计有影响,不能直接哈希,又变成了一个在 \(t\) 中枚举区间的问题,复杂度直接假完了。
有点慌了,赶紧去看了下 T4,好像是个限制很阴间的排列计数,感觉我就算能推出最简单的 dp 也只能拿到蚊子腿分数。想了一下觉得 T3 第一步性质因该是找对了,有前途,于是决定放弃 T4 直接冲 T3。
继续想 T3,发现假做法中,排开对每个询问求最长公共前后缀,剩下部分的统计似乎只需要 \(O(1)\) 即可?这个统计的复杂度明显有点太优了,但是直接枚举 \(t\) 的子串是 \(O(L^2)\),需要一种 \(O(L)\) 的做法来统计答案。发现能作贡献的\(s\) 的“最长公共前缀”一定是 “\(t\) 的最长公共前缀” 的后缀,“\(s\) 的最长公共后缀”一定是 “\(t\) 的最长公共后缀” 的前缀。如是考虑对 \(t\) 的公共前缀和公共后缀分别放到两棵 trie 树上考虑,但分析了一下发现了我不太会。(实际上正解就是这么做,考虑两棵 trie 上子树的 dfs 序构成一个区间,同时对两颗 trie 的限制进行计数,本质上就是二维数点。)
又想了一会有了思路:由于同时处理前缀和后缀,建两棵 trie 不好处理。于是可以考虑 枚举 前缀,再用一棵 trie 来处理后缀的限制。这样子应该就变成了只在一棵 trie 上的问题。发现统计答案的时候,由于前缀的限制通过枚举解决了,那么计数的部分同样是直接 hash 即可,单个询问是好做的。
继续思考怎么拓展到多询问的情况。按照单询问的做法,每处理一个询问就会在 trie 上移动一条路径的距离,于是多个询问复杂度就假了。由于每个询问在 trie 上行走的路径有很大部分会重合,启发我们想到可以离线,把所有询问都挂在 trie 对应的节点上,最终只需要遍历一遍整颗 trie 就能处理完所有询问,复杂度会均摊到每次询问上,是询问字符串长度的和。对 trie 树上的遍历还要使用 dfs 做差技巧。
思考用了差不多 0.5h,于是开写。调了 1h,de 了若干个 bug 之后终于明确 样例 3 过不了是因为哈希冲突了,然后试了好久的大质数终于给我找到了心仪的 1e17+19,通过了所有大样例。

接下来比赛剩下最后 0.5h,也是我自掘坟墓的 0.5h。

注意到我的 trie 开了 \(5\times 10^6\)unordered_map\(5\times 10^6\times 26\)int,我开始担心我会不会炸空间。然后我一翻 pdf,脑中只剩紧张,目光居然只看到了 T2 的空间大小:512MB。是的,我空间大小看错了,看成 T2 的了。然后我一算发现空间直接爆炸了,于是胰岛直接爆炸,唐诗占领大脑,在不会动态开点 trie 的情况下用 15min 糊了一个 \(5\times 10^6\)vector 的 trie 出来,给代码增加了 \(26\) 的常数,渴望这样子能卡卡空间。(实际上我这个写法不仅非常慢,而且空间实际上比直接开静态数组更大了……),最后 10min 的时候终于调出来了,紧张死我了。
最后的时间就是检查一下代码注释中的 fuck 有没有删掉,又测了一遍文件输入输出之类的。


Day 0.75

出考场后朋友告诉我 T3 空间是 2G 的时候我人都麻了,我居然在最后 0.5h 让代码慢了 \(26\) 倍?果然心态不好,正赛紧张起来头脑完全发昏,实际发挥和思路上有巨大差距啊。

爆点 \(2\):T3 询问串 \(t\) 的长度居然可以不相等,明明小样例 2 就有我还没发现,直接让我的 T3 由于 RE 的可能性变成 rand() 分,麻了。

又逛了一会夜晚的松湖,很静谧,很怀念。

回家默写了一遍考场代码,幸运的是在 luogu 云斗 mx 等平台 T3 都能通过,现在就看 NOI Linux 能否放过我了。

估分:100+100+[0,100]+0

image

我觉得 300 挺好的,希望梦想成真。

posted @ 2025-11-02 13:53  S·A·I  阅读(52)  评论(0)    收藏  举报