致我的八年算法竞赛生涯

前言

紧张刺激的保研生活以一种意外且迅速的方式落下帷幕,我很幸运地成为那少数能在六月初便确定去向的人。无论如何,现在终于有时间来完成那些令我心心念念的事情了。

所以,让我们来聊聊算法竞赛吧 —— 这个陪我度过八年人生的事业。

算法竞赛给我带来了开阔的视野、扎实的代码基础、深交的挚友们,让我认识到了我和大佬们的差距,让我深刻地懂得了自己的优势,也让我深入地思考了自己人生的意义。

谨以此文,告别我的八年算法竞赛生涯,告别我那学生时代中最为热爱的事业吧!

初一&初二

那是2015年秋季,刚刚踏入福州第十九中学的我,在某次午休的时候,发现了学校的机房,也透过门扉发现了上课的学长学姐。我觉得他们很厉害。这大概是我遇见信息学(即算法竞赛)的第一眼。

随后,在一次机缘巧合之下,我参加了学校举办的信息学讲座。当时,王老师在台上讲着“斐波那契数列”,而我在台下想着什么呢?难道是一位天才少年立刻听懂了斐波那契数列的求解思路?不对!刚刚被父亲推荐《DOOM启示录》并读完这本书的我,深受约翰卡马克的鼓舞,在台下想的只有:“哇,是编程!学习编程是不是就可以做游戏了,好,我要学习编程做游戏”。

于是,我就报名了福州三中的信息学寒假入门班。我记得,寒假第一天上课时,机房座无虚席,乌泱泱的一片全是人,少说也有一百多位。但第二节课,人就少了快一半。到第二轮进阶班时,只剩下了不到二十位同学,坚持下来的同学非常少。后来,我和其中大约一半的同学都成为了要好的朋友,成为了八年之后仍在每天水群聊天的好伙伴。在我写下这段句子的前一天,DWTornier和Terry还向我安利《超自然车旅》这个游戏,他们成功了。

又过了一两个月,我加入了十九中的信息学社团,成为了一周两次在午休时跑到机房写代码听课的网瘾少年。王老师当时布置了许多题目,不知不觉就全部做完了。当时将题目全部做完的同学,印象中只有我和蓝猫。

再后来,到了初二,我就拿到了信息学竞赛普及组的一等奖,成为了十九中当时同年级唯一一名拿到一等奖的同学。

初三

初三的我水平停滞不前。中午去机房写代码,周末去三中参加培训,我学信息学没什么目标,只是在做。

当然,从那时起,我就再也没有假期了。无论是寒假还是暑假,我都会到三中参加集训,上午上课学算法,下午打比赛写题。

而要说集训时光最快乐的,其实是“摸鱼”罢。是的,我集训生活中印象最深刻的,是“摸鱼”,是偷偷玩游戏,是一群人在机房里打CS1.6。我记得我可以用一把AWP单挑机房内所有的其他人,只要屏幕内出现了一个点,我就可以将鼠标挪到那个点上,所以我最喜欢玩的地图就是那张经典的平地狙击地图,把其他同学当作靶子打。

后来,老师禁止了cs1.6,于是我们就开始在下午比赛的时候,用最快的速度写完所有题目的暴力分,然后开始自己写游戏玩。那是一场七天的集训,我们几个好朋友总共开发了至少五款游戏:我的凯撒传说、DWTornier的穿越空间站、蓝猫的OIer星球、IceLocke的Maze,还有我最喜欢的,同样出自IceLocke之手的OIer的生活 —— 我们之中游戏性最高的一款作品,你甚至可以在里面通过援助交际进行赚钱,可惜源码和可执行程序都已经丢失了。

凯撒传说 —— 我的第一款游戏,梦开始的地方

所以,初三的信息学水平基本没有精进吧。那一年,虽然还是拿到了省一等奖,但是DrivenHank同学的分数反而超过了我。

之后,便是中考了,升学的压力随之而来。而当时的我,并不知道省一等奖意味着什么。直到初三下学期的时候,王老师跟我说,省一等奖可以直接保送到福州三中,我才震惊了。

我突然就不需要中考了。

高一&高二

确定能保送后,我从初三下学期开始,便跟随三中的黄老师进行集训。

我当时非常非常地伤心,每天都很难受,因为,我以后再也无法看到初中班上可爱的女同学了(呃呃,下头男真的是)。从现在看来,这也是我人生的一个分水岭吧。在之后的人生中,直到现在,我都没有和异性再有过长时间的社交,令人感叹。

“期待和恐惧,它们是邂逅的附赠品。” —— 《Flowers》白羽苏芳

就这样,我进入了福州第三中学。认真开始集训后,水平有了极其明显的提升。

在初三升高一,即2018年的暑假时,我到了浙江衢州的正睿OI参加信息学集训。那次集训,我见到了许多大佬,甚至被一群六年级的神仙暴打。最后作为惩罚活动,我还在一百多人面前唱《数鸭子》。现在回想起来,可真是不堪回首啊(笑)。

我也多次到了浙江诸暨的海亮参加信息学集训。在海亮的生活,也是我信息学集训中最难忘的一段时光吧。在海亮,我第一次看见了雪,看见了那如梦似幻般的漫天大雪,看见了同学在雪地中画出的YYC AK IOI,看见了那小情侣在雪中踩出的爱心,最后,也看见了时代的变迁,自主招生的消逝,与强基计划的出现。

当时的我,根本不知道自己的所欲所求,也只是随波逐流的一份子罢了。所以,我做出了我目前人生中最后悔的一个决定 —— 我退役了。我在NOIP中获得了全省前60名的成绩,在半年的时间中以省队选拔和国赛为目标,做了大量的努力,而最后,我却连省队选拔都没有参加,就退役了。

哎。

虽然退役了,但代码功夫还是不停,我还是每天的往机房跑。在接近一年的时间里,我自学了SDL2,写了一个实时的2D竞技场游戏,缝了点强化学习,发现自己打不过自己写的AI,最后莫名其妙地拿了某个比赛的第一。

在海亮集训时,IceLocke所拍摄的美景

高三

升学的压力逐渐来临,但我不喜欢背书、不喜欢刷题、不喜欢天天坐在教室里日复一日地写着卷子。所以,我选择了代码。

代码只是我逃避现实的一种手段,让自己看起来像在努力一样。

我喜欢写游戏,正值GAMES101横空出世,于是我就在高三的自习课上刷GAMES101。陆陆续续地,我便把GAMES101全看完了,给每节课都做了工整的笔记。在那,我认识了图形学,认识了这个让我魂牵梦萦的东西。

对于当时的我来说,图形学也只是我逃避高考的一种手段,虽然我确实喜欢她。

但对于我来说,最幸运的就是,我还能考入北京交通大学。

大一

我来到北京交通大学最首要的原因就是算法竞赛。

三中的陈学长跟我说,北京交通大学和上海大学的ACM都还不错,比较适合你的分数。但上海大学当时的招生老师不是很友善,非常严肃地告诉我,省一不能转到计算机专业;而北交虽然同样对省一没有优待,但招生办的老师人很温柔,他说,省一或许可以转专业到计算机。所以我来到了北交。

我对大学生活充满了期待,因为我终于可以不用把时间花在那些无聊的、浪费生命的、重复性的任务上了!初入大学时的我兴致高涨,在班主任刘老师的建议下准备保研。于是,在大一,我成为了一名不折不扣的卷王,甚至愿意在考试前背诵政治材料这种影响身心健康的东西。最后,我也取得了一个不错的排名,在软件学院的一百七十余人中位列第二。

同时,在算法俱乐部水群的时候,我被rankyu学长发现,于是加入了ACM校队。凭借着高中还算扎实的基础,我在新生赛中拿到了冠军,在校赛中也拿到了冠军。

rankyu学长的消息

大二

如果我的大一可以说是“崭露头角”,那么我的大二就可以说是“堕入低谷”吧。

在大一的暑假来临前,我加入了pengym学长和rankyu学长的队伍 —— 白夜追风。随后,在暑期集训中,一起训练。但由于疫情的影响,线上集训的效果始终不佳,对我而言,摸鱼和划水成为了常态。

大二上学期,赛季前,我们队一周训练三次,并且基本上每场都有补题。我们在虚拟训练赛中达到的排名,也能获得往年的金牌。

那时的我,十分的自负,自负过头了,甚至说出了”我们队三个人,只需要一个人打就能拿银牌。所以三个人在一起,银牌肯定没问题,争取拿金牌就行了“这种话。

第一场区域赛 —— 2022 CCPC 威海

我们队因为题目读错,卡在了最简单的二水上,从开场卡到了比赛的103分钟。但凭借着扎实的能力,我们中期的过题速度很快,在53分钟中通过了4道题!最后位列银牌中段。

”这次发挥这么差,我们还能拿银牌中游,下次顺利的话说不定就拿金了!“,赛后,我这么说。

而谁又会知道呢,第一场的银牌便是我们赛季的巅峰。

第二场区域赛 —— 2022 CCPC 广州

广州站的前一小时,是巅峰的一小时,我们队迅雷不及掩耳之势在第44分钟时,便以0罚时的优势拿下了三道题,位列全场第三名!

而令人绝望的,之后的四个多小时,我们一题都没有做出来。

排名趋势变化图,令人绝望

那或许算得上是我生命中最折磨的四个小时之一了。

或许大部分人的情况是:“有思路,但是代码实现出了问题”,而我们队则是:“根本没有想法” —— 四个小时,一道题的做法都没有想出来。

我依稀记得,在封榜前几分钟,我开始尝试树上背包。但我当时已经知道,这个算法是错的,只不过是为了缓解自己的痛苦,所以还在写着代码而已。我写了半个多小时,放弃了。对着不完整的算法写了半个多小时的代码,事后自己都觉得可笑。但我笑不出来。

这四小时中,周围的所有人都在慢慢的超过你,你的排名从前10,滑落到金牌区末尾,滑落到银牌区,最后滑落到铜牌区。

反观同赛站的夏老师(大名鼎鼎的StarSilk),以零基础的身份,在这场比赛中第一次拿到了金牌,拿到了北京交通大学两年来第一个ACM金牌。

第三场区域赛 —— 2022 ICPC 合肥

相比第一场比赛的题目读错、和第二场比赛的完全没有思路。我们队的第三场区域赛,则是彻彻底底地告诉我们:“菜”。

没有任何的借口,有思路,但是代码调不出来,写不对。

我们在封榜后进行了双开,希望能同时通过两道题目,朝金牌发起冲刺。然而,在比赛结束时,我们也一题都没通过。

最后,我们只拿到了铜牌,并且是铜牌的第一名。

铜牌的第一名,遗憾

第四场区域赛 —— 2022 ICPC 杭州

因为疫情的影响,这场比赛只能单人参加。讨论后,决定由我单人参加。

赛前,我仍然在幻想着,自己能超常发挥,拿下金牌。而现实,算法竞赛,总是无情的,不会给你留下任何脸面。

我拿到了和广州站一样的剧本,但落入了更令人绝望的深渊。

我在开场17分钟,跟榜通过了两道题目,位列全场第七名!

但是,随后的第三题,是一道数论题,需要用两次exgcd才能通过。在这个赛季中,我们队所有的数论题都交给队友pengym实现,我甚至已经忘记了exgcd怎么写。

于是,三小时过去了,我没有做出第三题。

我又体验了一次,广州站,看着排名一点一点往下掉,周围的人一点一点超过你,但你就是想不出来解法的绝望。我一个人坐在老家的屏幕前,看着题目。

之后,我强忍着泪水写完了第四题和第五题,但最后的排名距离铜牌还有9名。

我打铁了。

比广州站更绝望,从前十名,掉到金牌区,掉到银牌区,掉到铜牌区,最后连铜牌都没有。

赛季后

这算是我目前人生中遇到的最大的挫折吧,我第一次在自己喜欢且努力的事物上失败的如此彻底。当然,从某种角度看来,我很幸运,我目前人生中遇到最大的挫折只是在自己热爱的事物上受挫。

但对于我来说,ACM,我所热爱的算法竞赛,就是我大学生涯中最重要的事物。我感觉我失败了。不止算法竞赛失败了,GPA也爆炸了,上课下课都在参加训练,大二上学期的排名掉到了第18名。我觉得我的算法竞赛生涯到这里就结束了,努力了这么多年的事业,竟以一个如此之凄惨的方式收场。

杭州站结束后,校队教练之一许老师发微信安慰我:“蜕变的过程,总会很难受。坚持住,就柳暗花明了”。

在赛季结束的几个月里想了很久。

“绝望的尽头是深爱” —— 《魔女的夜宴》

如果没有深沉的爱意,又怎么会感到绝望的痛苦呢?高中,我选择了退役;而如今到了大学,我不愿重蹈覆辙!

我不甘心,我要打下去。

大三

两位20级的队友退役了,于是我找上了同是21级的前队友 —— lovekdl 与 MakiseChris。

lovekdl是从高中开始打信息学竞赛的选手。我们在大一下和Liqi同学每天网课都在玩《Apex英雄》,最后三个人一起登上了钻石段位,同时我们还一起取得了北交第一届《Apex英雄》校赛的亚军。

MakiseChris是零基础选手,进入大学后在半学期内刷了几百道Leetcode题目,直接获得了新生赛第三名。他很厉害,要说的话,我认为他是我们三个人中天赋最高的选手。

但他们俩都已经在大二时取得了四个银牌,对于他们来说,性价比最高的就是退役做科研,这样才能在保研期间进入清北等顶尖高校。

我说服了lovekdl和我一起努力,一起训练学算法、一起冲击金牌。而MakiseChris醉心科研,无心训练,但好在他的脑子是真的好用,我和lovekdl最喜欢的就是把算法跟MakiseChris说一遍,然后他就找到了我们算法的漏洞。

就这样,我们三个人组成了新的队伍 —— 蓝色线段树。

蓝色线段树,从左到右依次为:YXH_XianYu, MakiseChris, QQ Bot, lovekdl

训练

我不愿重现2022年的惨状,所以我决定将所有时间投入算法竞赛,将其视为最高优先级。对我来说,算法竞赛比保研,甚至比本科毕业的优先级还要高。

其次,便是整理训练思路:首先,必须先将算法学完,再开始系统参加训练赛。这就好比高考,你必须先系统学习所有知识点,再刷题一样。碎片化的学习对理解一套体系的效率是极低的。这是一个很显而易见的结论,但去年的我们并没有遵守。其次,每场训练赛中能做的题必须要补。不订正,就无法知道队伍的缺陷,下次看到同一道题还是不会。最后,个人能力要足够强,每个人必须打上CodeForces橙名,必须确保代码正确率足够高,面对问题有一套自己成体系的、有逻辑的思考策略。而在团队合作上,没有思路就要换题,同时,在交流题目的时候尽可能不要污染队友的思路,让队友独立地从零思考问题。

一个多月的暑期集训飞快地就过去了,我感到很高兴,算法竞赛集训的时光总是我人生中最快乐的时光之一。9月份开学后,我仍然遵守着ALL IN算法竞赛的策略:作业能抄就抄,上课能不听就不听,将尽可能多的时间投入算法竞赛。

“我必须考虑这是否是我此生仅有的机会”,我有两个梦想,第一个是取得ACM金牌,第二个则是开发一款能打动人心的、对人有意义的、对社会有价值的游戏。

今年如果无法拿到金牌,那我一定会为此遗憾一生。

第一场区域赛 —— 2023 CCPC 秦皇岛

熟悉我的人应该知道,我们在这场比赛中拿到了金牌。

当时lovekdl向我跑过来说,“我们好像金了”,然后我兴冲冲地跑到舞台后,发现老师手里拿着一个名单,上面是金牌队伍 —— 第18名,蓝色线段树。

之后发生了什么,印象已经模糊了。我只记得我站在队伍里流泪。我没什么表情或者举动,就是笔直地站在那里,眼泪就是止不住地流下。

一年前的最后一战,我看着我的排名从前十滑落到几百名,从目标的金牌到与铜牌失之交臂,绝望在那一刻狠狠地扼住了我的喉咙,竞赛的残酷给了我重重一拳,将我打趴在地上。我一个人在老家的电脑前,努力地让泪水不滑出我的眼眶。

那时,我以为我的算法竞赛生涯已经结束了。

而我现在,却站在金牌的领奖队伍中。

一年前,我忍住了我的泪水,而现在,我的泪水止不住地向外滴落。

我感觉,那是我人生中最美好的时刻。

第二、三场区域赛 —— 2023 ICPC 西安站、南京站

后两场比赛,我们也拿到了金牌,成功取得了“本赛季区域赛全金”的成就。

我非常幸运地,用三枚金牌给自己的算法竞赛生涯画上了一个完美的句号。

蓝色线段树与三个金牌。我穿着“李培楠夺冠纪念T恤”,他是我敬仰的人之一

一路走来,在我身上发生的事,正如许老师鼓励的话一样,也好似游戏中的人物 —— 历经磨难最终蜕变。

无数个巧合与周围的人绘织成了这么一个故事,我很感谢周围一直帮助我的同学、老师、教练和父母,感谢大家一起编织的这个故事。

正如某位伟人的话:故事终究是需要服务于人民,改造世界的。幸运女神眷顾了我,而我又从自己的故事中认识了什么呢?

我觉得,我只是普通人。细数我短暂的初中、高中、本科生活,我大部分的成就,均来自我的兴趣,均来自那些不记成本般投入的时间。ACM区域赛金牌也几乎到达了我能力的极限,没有更长时间的积累和努力,很难取得更高的成就。

我和许多能考入清北华五的大佬们不同:我既没有那超乎常人的智慧;也难以静下心来学习我不感兴趣的知识。我只是普通人,会不小心看b站和知乎看到四五点、缺乏自制力的芸芸众生。我断断续续背了五六次英语单词,全都无疾而终,最近的一次甚至只坚持了三天。对于我来说,不努力就不会有结果,算法竞赛是这样,GPA是这样,其他事情也是这样。

但我热爱,我愿意在自己热爱的事物上花时间,我愿意不断地追逐我的目标,我也愿意把自己的人生交给我热爱的事物。

我一直认为,我如今获得到周围人认可的原因,只是社会的需求碰巧和我的喜好重合罢了。如果我出生在一个不需要算法、不需要图形学、没有任何娱乐的世界,那么我的故事或许也将不复存在。社会在变化,又或许,在未来的某一天,周围人的认可便会离我而去。

但至少在当下,在这个宇宙,在这个充满了电子游戏与计算机的世界中,我希望,我能用我的热爱与付出来回报我的喜好,回报社会的需求,尽可能地为我热爱的事物做贡献,最后,也为这个美好的世界献上祝福。