八年长梦
八年前,我差不多11岁,正是收到霍格沃兹请柬的年龄;然而霍格沃兹这个中专似乎并不在广东招生,我就去了另一所魔法学校——中山纪念中学信息竞赛班。通过了简单的选拔考试之后,我如愿以偿地在那个暑假对号入座,在自己的机器前坐下,敲出了第一份 a+b 代码。
就像现在很多少儿编程思维入脑的“神童”一样,当时我理解的编程是,会编出牛逼的游戏、会实现牛逼的效果,这就是它的终极目标!于是我抽空紧赶慢赶,在还不会递归、还不会 STL 容器的代码水平下,搓出了一个两百行的 C++ 小游戏;然后有天我上厕所没关屏幕而游戏窗口还在运行,就被教练发现并且喜提罚站+检讨了。
教练告诉我,我们信息学竞赛不是简单的少儿编程,而是算法的竞赛。我们不追求虚浮的表面功,我们想要算法思维赋予我们的强大内力,只有后者才能让我们在赛场上一决胜负。
我有点听不懂,但是后面当我们 C++ 语言的基础逐渐扎实后,我们就被带到了算法世界的参天大树面前。它无穷高,一眼望不到头,顶上是璀璨的星辰,脚下是坚实的根,枝头上挂满的不是果实,而是各种宝箱——教练说,我们会一步步解锁里面的独特宝藏。我望着这棵树上的未知宝藏,心里充满了全新的向往。
排序、搜索、动态规划入门、图的遍历——我们在教练的带领下一步一步地往这棵树上爬,在千番百态的题目数据中排序、筛选、计算出最终的答案。教练开始放手让我们在全班面前,讲解题目做法——当我第一次站在讲台上、克服胆怯向大家自信地讲出一道练习题的做法时,下面同学的掌声和投来的羡慕的目光是我至今难忘的。虽然作为后人视角,往前看,有点小嘉豪的意思;但是别的同学大多也是嘉豪,就很……然而我们并没有整天听着 Alan Walker 戴着兜帽原地跳舞,而是用算法挑战极限的时间和空间限制。
随着编程技巧和经验的积累,以及算法水平的逐渐进阶,在算法之树上往上爬,我惊喜地发现:最大的喜悦不是解开一个个谜题的短暂成就感,而是在算法路上向着下一个经验点攀登的过程的憧憬。别人:王者、吃鸡、第五人格、明日方舟,我:你这道题的做法快不过我你信吗!我不管别人怎么想,反正沉浸在用更简单、更高效解决问题的算法艺术中无法自拔——繁杂低效是丑陋的代名词,简洁轻量是优美的好伙伴。当几年后,数学课上,即便老师反复强调“我只讲基础做法,有更快的做法你们自己分享”的时候,我拼尽全力也无法战胜自己举手分享秒杀做法的念头。别的同学大可以说我特别“豪”,但是我自己认为我捍卫了内心中的美,这就够了。
然而当小学毕业之后那个无忧无虑的暑假悄悄过去,随着初中生这个帽子被扣到了我的头上,很多功利层面的压力就偷偷钻进了我的心里。蔚蓝的天空开始有了几朵乌云,它们是外在、潜在的要求:你要拿到省一,你要在文化课名列前茅,你要去冲刺省队,你要去战胜全国决赛的几百名选手拿下金牌进集训队;学校老师经常拿我下滑极快的文化课成绩说事,说竞赛投入的时间代价太大,不值得;教练没有说我们最后会走到哪里,他只是说保持兴趣坚持到最后就行了。我依旧不听这些外在要求,依旧享受着在算法树上开箱的快乐,但是它已经不再纯粹,像是没完全熟的果子中的几分苦涩。
成为一个正式的竞赛生,意味着我有很多次参加比赛的机会——小学六年级时侥幸通过分数线,去广州打了省赛的普及组,捞了个二等奖让我得意洋洋;初一时候纪中开始成为东道主,如愿以偿地拿到了普及组一等奖,感觉提高组一等奖也是近在眼前了;初二终于过了全国联赛省一分数线;这些看起来唾手可得的奖项,麻痹了我的内心,也让我低估了身旁马上到来的危机。
直到 2022 年省选,那年省选分两个组别,却都是两条不同的斩杀线。在无比疲惫的奔波下,纪中参加高中组的选手折戟沉沙,省选战绩惨不忍睹;而在线上我参加的初中组中,我亲眼见证了许多同届同学出现各种状况、失误,然后出成绩后在教练的“500分以下考虑结束竞赛”这一斩杀线下,哭着回去宿舍打电话。第一次,我感觉到,“算法竞赛”这个名字露出了狰狞的獠牙。聚光灯外是一片漆黑:它到底是残酷的,它可以把无数真正的高手推上领奖台,也可以把无数日夜的努力在一道题目中彻底得不到任何承认。真正能笑到最后的,不只是算法水平的高手,也是遇到各种挫折还能绷得住的老绷带,还是运气眷顾的真正选手。
我害怕。我迷茫。我意识到自己的比赛似乎是为了靠前的排名而战。升入初三,我无意间开始把算法竞赛的重心转向:获得更好的竞赛排名。2022年的提高组我以微弱优势领先全市所有初中生、拿下了比以前都要好的成绩。外人看来,似乎我步入正轨了,似乎我懂事了,我自己也认为似乎我的竞赛水平大爆发了、不再浑浑噩噩了,但是多了几分不自在的感觉。
初三下,我拿到北大夏令营奖项的时候,我曾经在未名湖的湖边幻想着,以我的这个势头再发展下去,拿个银牌再强基进北大,大概不是问题吧。现在看来,去到了信科专业,也去到了北京,只是去到了北京理工大学,还是多了两个字。
升入高中,竞赛终于对我张开了血盆大口。在2023年的联赛中,我拼尽全力拿到省一等奖,但是全省150的排名,是省队队线的10倍,基本宣判了我竞赛生涯的死刑。你能进省队吗?你能拿到牌吗?哪怕你能拿到牌,你的文化课成绩就位了吗?在这三个问题的答案都为“否”的情况下,我学习算法竞赛的底气已经被它们扎漏了。渐渐地,我开始选择放弃,从放弃一场模拟赛,到放弃算法提升的机会,认为:我走不下去了。
冬天过去,春天却没来。我知道大限将至,但我想着凭借自己的残存的水平最后一搏。结果命运就喜欢开玩笑,还给我一个不太狼狈的退出借口——省选第一天第三个小时,考场电脑蓝屏了,数据完全无法恢复。学竞赛六年来第一次、也是最后一次蓝屏。所有硬盘里的数据被瞬间清空,所有想法也被残酷敲碎。监考老师围了上来,徒劳地重启、试图恢复数据。我可以选择加时,但我没有。我知道无论有没有这场风光大葬,也是时候结束自己的竞赛生涯了。
那是周天,回程的车上,我没有哭,没有笑,就在一个人的黯淡中,轻轻闭上眼睛,感受路面的颠簸、大巴的走走停停。那周五,我给教练发了退出竞赛的消息。这个世界在摧毁时,没有天崩地裂,没有岩浆喷涌,只剩下算法之树的腐朽枯萎,最后一切都褪色,只剩下灰白的世界。
退役之后,我决定远离信息竞赛,低调地躲避众人的目光,我或是被动、或是主动地回避自己是个竞赛生的身份。很快,搞好文化课成绩成了唯一要务,似乎我根本都没学过竞赛,似乎我是直勾勾考进强基班的,似乎我除了“竞赛班学生”这个头衔之外,和竞赛一点关系都没有。
就这样,我似乎已经融入了新的生活节奏。早上跟他们一样卡点到教室,中午依旧是抢饭堂,下午看着他们课间在大屏幕上打 pvz 杂交版,即便升入高二,也就是紧迫了些、作业多了些,我被他们同化成一个普通的高中生该有的模样。
高一高二的竞赛班,退了竞赛之后时间就很充裕了——一闲下来,我就开始胡思乱想,想起短暂的高光时刻,想起骤然的毁灭,想起白茫茫一切真干净的心灵世界,我想用文字描述下来,可惜一到动笔时,思绪便失去了它的形态,变成了一团浆糊。好不容易,我终于提笔写下了《冬虫夏草》,给那只莽撞执着的夏虫作了一块墓碑。
在高一高二的两年里,我逐渐开始用其他爱好去填满心灵、时间上的空缺,并且想起自己竞赛之前的爱好。我开始重拾电烙铁,给一个又一个焊点笨拙地上锡;我开始沉醉于中 v,期待枕头上的洛天依玩偶能莫名其妙给我唱一段《蝴蝶》;我甚至在小卖部发现了一本《航空知识》,然后就是幻想着拉杆机头朝上起飞的姿态。似乎这几种良药都能把我从先前的消沉中释放出来。
我不再理会他们有什么比赛,但是面对大佬退役,我也会感叹。总有人会在聚光灯外的阴影里面默默哭泣的。
然后我就开始了地狱主线任务——高三,在考试和作业堆成的试卷题海中活下来,并且到达遥远的彼岸。兴趣爱好的时间几乎丧失;脑子也装满了各科的知识点、方法论,根本没时间去“胡思乱想”;我只能偶尔抓住课间的空隙,在无视风险继续安装的勇气下在班外面爽唱洛天依曲。
终于,三百天变成两百天,两百天变成一百天,然后三天、两天、一天、负一天、负二天、负三天……马不停蹄地准备强基、综评,最后得知高考成绩不错,强基和综评都没用了。
我终于毕业了!我松了一口气,功利的枷锁终于暂时解开了,这个暑假我不必被任何成绩绑架了,我只想做回我自己。
纪中这一身份即将被大学生的生活淡去,我会远离家乡、漂泊求学,但是我还有一件事没有办。
八年前,我是一个好奇着打量一切的小朋友;六年前,我是一个汲取算法知识解渴的算法爱好者;四年前,我是一个贪图功利、为了奖项而奋斗的竞赛选手;两年前,我是一个迷茫无助的普通高中生。
现在,我以一个纯粹热爱的准 ACM 选手,一位希望让大家能抵达更远远方的临时竞赛教练,在毕业之后,重新踏入纪中信息队的家。
我每天更新课件,用最简单、最直白、最不绕弯子的形式把进阶算法专题掰碎、拆透、喂到每个初中选手的嘴里。我做了之前回母校的代课教练从未做过的事情:在五天里,我亲自讲七个专题,每节小专题课三四十分钟,总课件超过 12000 字。虽然因为仓促,课件只有 pdf,可能不太完美,但是看上去他们还是很买账:不到每晚 19:30,就有一堆同学抢着凳子、直接跑到讲台前听讲评了,我时不时往前面看,同学们投来的渴望像激光一样、可以把课件看穿。
我不要报酬,因为这场训练本身,就是自己给纪中竞赛团队最好的馈赠。一根手指,一块白板,不绕弯不装腔,把路给他们摆在前方。虽然说不期望几天下来能够一句一句给他们拉出迷雾里,但是我想要尽我的绵薄之力,给后来者领略一下算法之树上那些宝藏的新奇吧。
也许我天生就不是一个为了冲省队冲金牌而学习算法的竞赛选手,只是一个想要慢慢往算法树上爬、慢慢体会算法之美的算法爱好者。我也愿意作为一个摆渡人,把后来的同学们摆渡摆向远方。