四月末的天气已经带着初夏的躁意,机房里的空调嗡嗡作响,却吹不散屏幕前凝固的空气,我盯着那道动态规划题,光标在编辑器中闪烁,像一根即将燃尽的火柴,在最后的赛程里徒劳地跳动着,这是CF(Codeforces)省赛的最后半小时,排名榜上红蓝交替,每一次提交都像在心脏上敲击。

CF省赛,全称是“Codeforces省级大学生程序设计竞赛”,它不像ACM-ICPC那样冗长,也不像蓝桥杯那样普及,它有着独特的“CF味”——限时短、反馈快、分数梯度陡峭,五小时,十道题,从签到题到防AK题,每一道都像精心设计的陷阱,等着你掉进去,再爬出来。 列表时,我的手指微微发凉,A题是二分答案,B题是树状数组的变式,C题居然是交互题,交互题在CF上很常见,但省赛里却不多见,这明显是想考验选手的调试能力,我深吸一口气,先从A题入手,十分钟后,首绿亮起,排名挤进了前二十,那一刻,机房的紧绷感松动了几分,有人轻轻舒了口气。
然而真正的战斗从D题开始,那是一道关于图论与博弈的混合题,题面描述简洁得像谜语:“给定一棵树,Alice和Bob轮流选择节点,Alice希望最终选出的点集构成连通块,Bob希望它不连通……”我脑海中浮现出无数种可能,却像被猫玩乱的毛线球,解不开头绪,周围的键盘声逐渐密集,那是其他队伍在与时间赛跑,我盯着样例,突然想到可以转化为“删边游戏”——把选点转化为删边,把连通性转化为最小割,一瞬间,思路通了,我几乎是颤抖着敲下代码,提交,AC,那一刻的喜悦,就像在暴雨中找到了伞。
可CF省赛最残酷的地方在于,它不会让你一直顺风,H题,字符串哈希加后缀自动机,我卡在了优化上,明明知道算法,但数据范围卡死了复杂度,每一次优化的尝试都换来TLE,我看着右上角的时钟滴答作响,开始焦躁,队友小声说:“要不先做I题?”我摇头,固执地继续调试,直到最后一次提交,仍然超时,我才意识到自己钻进了一个死胡同——这个题的标准解法是后缀数组,而不是自动机。
离比赛结束还有四十分钟,I题是一道简单的数学题,我却因为手抖差点写错取模,提交时,我闭上眼睛,屏住呼吸,直到屏幕上跳出绿色的“Accepted”,才敢睁开眼,那一刻,我忽然明白,CF省赛考验的从来不只是算法,更是你在高压下的决策力——止损、取舍、承认自己的局限。
最后的分数定格在第七名,没有奖牌,只有一张薄薄的获奖证书,但这不重要,走出考场时,夕阳斜照在走廊上,我们谁都没说话,半晌,队友笑了:“明年再来,把那道H题用后缀数组做出来。”
我也笑了,是的,CF省赛就像一场代码的修行,它让你在一次次TLE和WA中认清自己,又在每一次AC中找回信心,它不会因为一次失败就否定你,但它会精确地记录下你的每一次犹豫、每一个放弃、每一回突破,那些代码行,是我们在算法世界里留下的脚印;而那个排名,不过是时间盖下的印章——真正的收获,是你在五小时里,亲手与自己的思维搏斗过的证据。
回程的巴士上,我翻出H题的代码,在注释里写道:“今日之败,他日之师。”窗外,麦田如绿色的海,一路向远方铺展,我知道,下一次CF省赛,我还会坐在屏幕前,继续这场永无止境的、与算法和自我的较量。

