我的 OI 故事(一):未知之旅

· · 生活·游记

写在前面:本篇文章是我竞赛回忆录的第一篇,覆盖的时间范围为 2021 年三月至 2022 年三月。如果你想了解更多,可以阅读竞赛生涯回忆录《我的 OI 故事》预告。

开始讲述这个漫长的故事之前,我觉得有必要说一下上小学发生的一些事情。

我在小学的时候学习成绩还算可以,并且有一个在当时看来非常独特的爱好——数学。小的时候什么也不明白,开始的那段时间,学了一些所谓的“奥数”,便觉得自己掌握了世间的真理。后来逐渐发现,解决一些困难的问题能给平淡的生活带来其他事情无法比拟的乐趣,便一发不可收拾,一头扎进了数学的海洋无法自拔。

许是因为这个独特的爱好,我的脑回路逐渐变得奇怪,常常和朋友们想不到一处去。于是我被一群热心的同学冠以“数学爱好者”和“理工直男”的称号。

后面那个称号的由来是有故事的。有一次上英文课,课堂上有一个默写单词的小测试,恰好我英文学得还行,很快就做完了。但是我的同桌却忘了“走路”(walk)的英文怎么讲,便偷偷地捅了一下我的手臂,想让我告诉她答案。我当时的第一反应却是:“考试怎么可以作弊呢?”紧接着产生了第二个想法:“说不定这个小测是允许交流的呢?毕竟只是课上的练习而已。”但是又拿不准主意。这个时候我“秉承着严谨的态度”,先是对她小声说道:“我觉得不太行。”随后举手询问老师:“这个测试允许同学之间互相交流吗?”

老师开始时用一种非常诧异的眼神看着我,随即憋着笑答道:“当然不可以了。”我当即反应了过来,转头就对同桌说:“你看,我就说不可以交流!”或许是声音有点大了,全班同学都听见了,几秒钟的寂静之后便是哄堂大笑。我当时不觉得什么,事后想来,同桌当时一定十分尴尬!从那之后,“理工直男”的外号仿佛就被胶水粘在了我身上,一直跟着我直到小学毕业。

另外一个有趣的事实是,大约五年级的时候,我不知道开了什么窍,在喜欢学数学的同时,还喜欢给各类人群分享自己的“最新成果”;不仅如此,后来专门成立了组织,带着一帮人吭哧吭哧地研究数学。我当时打死也想不到,在这些过程中历练出来的本事——演讲与组织,会在几年之后成为我极为重要的傍身技能。

充实的一天天逐渐过去,不知不觉中我迎来了小学生涯的最后一个学期。

六年级下学期的时候,市里下发了一纸文书。具体的内容记不得了,大体说的是一种叫做信息学竞赛的赛事正在各地蓬勃发展,为了追赶时代潮流,教育局决定在今年的暑假首次举办信息学竞赛的培训夏令营。但是由于当时市里没啥人会这个,为了决出合适的人选,必须得先进行一些培训,再经过层层选拔之后,最后确定要让哪些人去参加夏令营。这些选入夏令营的选手还有一个响当当的称号:莆田市未来竞赛发展的“种子选手”。若干年后我才知道,原来那时的我们是“第一批吃螃蟹的人”。

一开始我并不想因为这个奇怪的东西而打乱了正常的学习节奏,毕竟谁也不知道这条路通往的究竟是什么地方。但不得不说,市里的宣传效果绝对到位了。我的爸爸在某一天下班回家,一见我就眉飞色舞地对我讲:“说不定以后就靠着这个竞赛保送了呢!”班主任也因为我的数学成绩较好,说服了我开始竞赛的学习。

说来也巧,我的妈妈在大学的时候学过一些基本的 C 语言用法。竞赛使用的语言是 C++,在当时的我们看来,两者相差的不多。于是妈妈自告奋勇,借着买来的两本入门书籍,决定自己先学一学,接着再教我。在那一年的四月,我敲下了我的第一份代码,输出的不是 Hello World,而是三个 6。从那天开始,我每天做完学校的作业后,都让我妈妈教我一点东西。很快就学完了循环结构,而此时学校也开展了对应的课程,我学得非常高兴。

很快我迎来了自己生涯中的第一次测试。这个测试的内容较为简单,全是选择结构及以下的内容,不到一个小时,我就拿到了满分。在查分确认自己没有挂分后,放学铃声一打响,我就迫不及待地飞奔回家告诉家人这个好消息。当晚大家都很为我感到开心,我也为自己阶段性学习取得的成果感到前所未有的兴奋。

在小升初考试之后,第二次测试,也就是夏令营的最终选拔在莆田一中举办。那是我第一次使用一中的 Online Judge,大家就在上面展开了竞技。比赛共有四个题目,前三题都非常简单,我不到一个小时就通过了。但是第四题却让我止步不前,虽说只需要用到选择结构,但是大量的分类讨论还是让我扎扎实实地吃了一惊。最后那道题目我拿到了 75 分,其他题没挂分,总分是 375,位列全市小学组第二,稳稳地入选了夏令营。当时的第一是同校的一名女生,考了 380 分——十分令我惊讶的是她通过了第四题,却在第三题挂分了。学校的教练听到这个消息后,终于久违地露出了笑容,随后马上打开手机,在微信群接连地发布了若干条喜讯。

几天之后,我接到了擢英中学的电话,电话另一头的老师通知我,我被理想的初中录取了。带着这份喜悦,我开启了夏令营的准备训练。

夏令营的第一轮培训在炎热的七月于莆田一中拉开了序幕。在那几天中,早上的时候在机房自己练习,对着一中 OJ 的题单唰唰地速通,下午的时候前往大礼堂听课。那段时间我如痴如醉地学习,脑子每天都在飞速地旋转,在短短的时间内了解了很多自己之前从未听过的概念,自定义函数、基础数论、模拟法……仿佛打开了新世界的大门。我惊讶地发现,自己在小学学数学时锻炼出的思维,此时居然派上了大用场。曾经作为一个“理工直男”找不到的同好,在这里也全都找齐了。

一件比较奇怪的事情是,似乎各色的入门教程中,都不约而同地有一章比较没用的内容——大整数计算(在 OI 中也常被称为“高精度”;我至今也觉得奇怪,这究竟是哪个神人想出的译名)。犹记得某一天的中午,我和一个同学坐在机房里头,预习第二天讲的内容——大整数加法。在我们的合作下,搓出了一份长相奇怪的代码。把这份代码提交到 OJ 上之后,获得了一个大大的 \color{Green}\texttt{Accepted}。两人对视了一下,我不禁扑哧一声笑了出来。可惜的是,这位同学在八月的第二轮培训中退出了——可能是我竞赛生涯中的第一次离别吧。

在第一轮的结业测试中,我不出意外又拿了一个满分。到了讲题的环节,我自告奋勇上台讲了一个关于 \gcd 的简单数论题,赢得了台下的热烈掌声。在掌声之中,我结束了自己的第一次集中式培训。

两次培训中间隔了整整一个月。这个月中我干了两件比较重要的事情:第一是家人筹划着给我报名了一个游泳培训班,于是每天早晨起来之后,就去水上乐园的泳池里头泡着,在教练的催促下,像一只被猎豹撵着的瞪羚一般玩命地蹬腿——一个月之后居然能简单地使用蛙泳前进一段距离了;第二就是为了在八月的第二轮集训中崭露头角,我每天下午回家后,第一件事就是打开一中 OJ,进行题目的训练。在这个阶段中,我又自学了递推和递归。一切都在有条不紊地推进中。

八月的第二轮培训很快如约而至。由于我在中间那一个月的大量训练,几位擢英中学的学长注意到了我。我开始时认为这是一件天大的好事——终于有人认可我了!后面却发现似乎并非如此:学长们似乎不太看得起这个训练没多久的小毛孩。于是在那几天我又一头扎进 OJ 里头做题,学会了大量的新玩意儿,一路学到了 DFS。在结业测试中,一道题的数据和样例都出错了。我第一个举手报告了这个问题,几分钟之后他们说改了数据和样例,问题解决了。但是成绩出来后,我的那题得分居然是 30 而不是 100!我百思不得其解。第二天在订正链接上又提交一遍,令人诧异的是这份 30 分的代码又莫名其妙通过了!我去询问老师这是怎么回事,经过一番排查,老师发现比赛的时候改数据并不会重新评测之前的提交,也就是说,如果我在改数据之后再次提交,那么得分可以多整整 70,进而排到包括初中组在内所有学员中的第一名!我为此难过了一小会儿——好在中午美味的午餐很快把我从糟糕的情绪中拉了回来。

还有一件有趣的事情。在第二轮集训中,我意识到了一个严重的问题:如果不在中午午休,那么下午的精神状态将会十分低迷。但是中学里头也没有床啊?我盯上了有凉爽空调的大礼堂和机房后面多余的大量小板凳。每到中午,我就把那些小板凳一个个搬进大礼堂,东拼西凑制作成一张简易的床,往上一躺就可以呼呼大睡——尽管不是特别舒服。由于我把这张“床”的位置选在了一面年久失修的白墙旁边,每到中午睡醒的时候,只要一伸手就会碰掉几块墙灰,掉在地上摔得稀碎。某天我福至心灵,拿了一个废弃的饮料瓶,手指往墙上哐哐一顿猛戳,弄下来巨量的墙灰塞进饮料瓶之中,再屁颠屁颠跑到厕所里头,往饮料瓶里加满了水就往礼堂走去。回礼堂的途中发现了一只快要死掉的蜘蛛,我一手抄起来扔进瓶里,关上瓶盖一顿猛摇,一瓶一中老牌生态墙灰水诞生了。

恕我直言,那玩意几乎是我闻过的最糟糕的东西:具体来说,老牌墙灰水的气味,和把大量劣质油漆与过期牛奶混在一起产生的混合物差不多。下午的时候我把这个生化武器拿回机房,旁边的同学非常好奇,一个劲想要闻一下。我死活不肯给,他更加来劲,直接一把抢过去,打开瓶盖一顿猛闻。紧接着,这人天杀地吐了出来!后来这瓶水被我放在了机房的某个角落,直到培训结束之后的某个晚上,睡觉的时候想起来居然还有这回事——我甚至不敢想象它爆炸之后会怎么样。但我很快就安慰自己,说不定这玩意已经被哪个保洁阿姨收走了。想到这我又安心地睡去了,却没想到这段奇特的经历,会在四年之后,以另一种未曾设想的方式回到我的面前。

八月末的时候,我前往擢英中学进行入学报道。从那天起,我正式成为了一名擢英 OIer。

进入中学之后,与我想象的一样,大家都进入了一个新环境,开始努力地学习文化课。只不过我的肩上比他们多一条担子,那就是我自己选择的竞赛。后面一段时间里,社团进行了一次招新,从我的同龄人之中选入了一批新的选手:他们将参加次年的夏令营选拔,也就是有机会成为市里的第二批“种子选手”。

国庆那段时间里,校内陆陆续续展开了几场考试,我的排名一般在前十名上下浮动。十一月的时候,社团进行了一次市创客节的选拔;然而那天我的肠胃状态似乎不是很对头,或许是吃了什么奇怪的东西,考试的时候胃里翻江倒海,我忍着痛进行思考,却在一道简单的题目上卡住了。考完试之后我飞一般地离开了机房,身后似乎还充斥着学长们的嘲笑——做了这么多题,居然没有任何长进。

我对自己的能力产生了一些质疑,发誓要付出更多的努力一雪前耻。在十二月的时候,市教育局买来了一些机构的线上课程供我们学习。那段时间里,每周末我都要学习一些新知识。令我印象最为深刻的是图论,曾经觉得非常困难的东西,结点间那一个个抽象的关系,在老师的讲解下居然活灵活现地浮现在我的脑海中。

值得一提的是,初一的上学期学校组织了一次数学竞赛,凭借着小学当“数学爱好者”时积累的数学知识,我鬼使神差地考进了前 20。后来参加市里的数学拔尖人才冬令营(其实就是教育局举办的一个数学竞赛入门训练营)选拔,不出意外地考进去了。寒假的时候,四天学习的内容分别是代数、几何、组合与数论,教授组合的那位老师在讲题的过程中介绍了一些与图论相关的内容,这让我无比兴奋。具体来说,他在课上提到了小学奥数中的“一笔画问题”,告诉了我们什么叫做哈密顿路径。这个定义被我牢牢地记在了脑海里。一段时间之后,我和几位其他学员聊天,惊讶地发现很多人都把老师讲的东西忘光了。有一个人倒是很有意思,他只记得老师上课“好像提到了一种水果”,追问之下才知道这种水果叫做哈密瓜。

短暂的寒假时光偷偷地溜走了,初一的下学期开始了。三月份的时候,教练告诉我们,CCF 举办了一个叫做 NOI Online 的比赛,叫我们去报名参加。我因为对水平不太自信,仅报名了入门组。一件有趣的事是,我拿到了一个吉利的准考证号 \text{FJ-00888}

NOI Online 比赛的那几天,“回南天”光顾了我家。南方特有的潮湿春天,让家里的墙壁和地板都产生了一层薄薄的类似水雾的东西,风干一会儿就会变得黏糊糊的,令人心情十分不悦。在糟糕的环境中,我开始了比赛。第一题是入门题做得很顺利,第二题是数论题,一看不会正解,连忙拼上了 40 分的暴力。第三题对于当时的我来说太过复杂,只写了一个简单的 DFS。当晚洛谷更新了这些题目,三题的难度评分为红蓝蓝:这样看来,我的表现还挺令自己满意的。

有趣的是,CCF 还在这场比赛中下发了大样例,这是我第一次见到这么大的样例!糟糕的是,那时的我不知道如何打开一个巨大的文件,便没有进行测试。等到出分的那天,我兴冲冲地打开查分网站,却挨了当头一棒:我的 T2 爆零了!其他两题得分还是正常的,最终的分数为 100+0+35=135。一顿排查后发现,当时我为了提升运行速度,T2 的一个循环上界除以了 2;然而这是错误的,并且小样例没有覆盖这种情况。如果没有这个事情发生,我那题能整整拿到 40 分。得知真相的我那叫一个悔恨啊!

俗话说,福无双至,祸事它也不单行。几天后全国前 25\% 的分数线公布了,正好是 140 分,比我的分数高了 5 分。我的心情仿佛一下子被打入了谷底。明明可以在这次比赛中证明一下自己,最后却被自己亲手搞砸了——如果加上那 40 分,175 的成绩足以让我在那些曾经看不起我的学长面前扬眉吐气。

话说回比赛那天。潮湿把情绪也泡胀了——我突然意识到:如果满足于现状,这条竞赛之路就只会越走越窄。回想起在两周之前的一个新发现,我决定去试试。那晚的我并不知道,这个尝试是我竞赛生涯中第一个极为正确的决定。它看起来微不足道,却像在命运的纸上划开的第一道口子,在不知不觉中,引领着我走向一条全然不同的道路。