魔法炮的OI回忆录

(第一段写于2018年5月19日,一年后终于想起填坑)

在我退役将近三年之后,我拜读了神犇“这也不那也不”和“普通的C”的OI回忆录,心中无限感慨,于是决定记录一些东西,以防止自己以后失忆将这些宝贵的记忆忘掉。

由于时间过于久远,以下内容不保证毫无遗漏。受“这也不那也不”神犇的影响,我打算写成小说的形式,由于我颓废了几年之后,写作水平严重下降,因此也不保证能准确表意。

以下情节均改变自真实故事,如有雷同,请务必对号入座。

第一章 不解之缘

2009年,在上过不知道多少节课外奥数班之后,五年级的小Z终于凭借自己七零八落的知识考入了F中,提前逃离F小的他再也不用每天听着那尖嘴猴腮的班主任进行资本主义批判了。当然,小Z那时对什么主义,什么阶级一无所知,只觉得她是嫉贤妒能而已。可是作为班主任,为什么要嫉妒自己的一名学生呢?这个问题他从来没去想过,也不必去想。

远离了尘世的喧嚣,小Z独自一人来到遥远的MZ小镇,开启了四年的初中生活。他的同学,是一群几乎陌生的精英群体,虽然有些人曾经在奥数班有过一面之缘,但沉默寡言的小Z并没有在吵闹的奥数班交下过什么朋友。加上突然早出晚归的作息,他常常感到孤独,在黑夜的长途校车中,经常独自仰望星空,直到车窗被雾气笼罩。

第一天的课程并没有给小Z留下什么深刻的印象,小Z害怕在新鲜感散去之后,他会不会对这样的生活感到厌烦。而课表中一节被经常称作“微机”的信息课吸引了他的注意。他回想起了小学时,也有一门同样的课程,每次有课都会引起群情激奋,进入神秘的机房还要穿上神秘的鞋套,听着神秘的老师讲着自己早就已经自己学会的基本操作,电脑屏幕还在老师的控制之中。有一次,在完成了所有任务后,他沉浸于前一天的天下足球剧情当中,偷偷打开了一部叫做《伯尔尼奇迹》的电影开始欣赏,然而在拉恩刚刚打进绝杀之后,就被老师发现,电脑也被强制关机。经历过这些,小Z并没有对这门最受欢迎的课有太大的期待。

到了信息课的日子,得知第一节课是在教室上,同学们都比较失望。上课铃声打响,走进了一个30多岁的男老师F,个头不高,说话铿锵有力,名字比较老土。老师在讲台上讲得有声有色,小Z听得也比较入迷,可他的脑子里都是穿越火线里生化金字塔的场景。

F老师讲了一个猴子和香蕉的故事:五只猴子被关在笼子里,笼子里有香蕉,但是如果猴子想要去拿香蕉,就会被喷水淋湿,五只猴子都不敢去拿香蕉。后来又放进了一只猴子,每当它想要拿香蕉的时候,就会被五只猴子暴打。之后每次放进新猴子想要拿香蕉,都会被暴打,而且自己被打过的猴子还会打得更用力。

小Z听懂了故事,但是他并不觉得这和这门课程有什么关系,他还在想着M60狂扫僵尸的场景,可当时并没有救世主和终结者模式,这极大地限制了他的想象力。

两天后,小Z终于等来了第二节信息课。机房在五楼,而教室在一楼,经过长途跋涉,他又费了好大劲穿上鞋套,才走进了机房,他的座位在靠门那一排,脸朝墙,电脑屏幕一览无余,自然不利于上课欣赏精彩的影片。

出人意料的是,F老师并没有像小学老师那样,讲解一些老掉牙的电脑知识,而是开始讲一个叫做“编程”的东西。小Z在几年前曾经对照着Flash教程书,抄写过一些自己怎么也看不懂的脚本语言,写出了能够用鼠标控制跳转的Flash动画,从那以后“编程”在小Z心目中就成了无比神秘又无比神圣的存在。小Z自然很感兴趣,于是格外认真努力地学习。

仅仅几节课之后,天资聪慧的小Z已经可以在深蓝色的代码框中自己编写出一些简单的程序了,这让他十分有成就感。Ctrl+F9和Alt+F5两个快捷键被他玩得不亦乐乎。他还注册了一个叫做SZNOI的题库,在上面开始用Pascal疯狂交题。看着一个个灰色的题目编号变成绿色,小Z洋洋得意。

但毕竟知识有限,小Z还是在尝试版切的道路上遇到了种种麻烦,只能去请教见多识广的F老师。在不断的交流当中,小Z开始与F老师熟悉了起来,每次信息课都坐到讲台前用老师的笔记本电脑写代码。他在网上还找到了老师的博客,看着博客中一点一滴的记录,他突然产生了一种渴望,渴望自己有一天也出现在博客里的这些名字当中。

勤奋刻苦又充满兴趣的小Z开始利用午休的时间来到机房做题,特别是周五的大扫除,没有扫除任务的他总是能够在机房待上几个小时。虽然只是做着一些简单的题目,但他似乎无法抗拒通过题目的喜悦。与此同时,他开始在F老师与别人的交谈中,听到一些自己从来不知道的神奇词汇,比如递归、回溯、NOIP……然而年少的小Z喜欢脚踏实地,对于这些自己可能一时半会接触不到的东西并不感冒,甚至不会去学习老师没讲过的东西。很不幸的是,这种习惯也一直持续了下去。

在与同学们熟悉后,小Z不再感觉孤独,他也在某次蹴鞠游戏中得到机会展现了自己高超的水平,终于加入了蹴鞠的团队当中。而编程的诱惑,则渐渐被蹴鞠的快乐所取代,那个机房,也很少光顾,以至于F老师都叫错他的名字。就像“普通的c”神犇所说的,隔离的环境使我们孤独,因此才会去编程。但一旦这种孤独感消失,编程就成了一件可有可无的琐事。

一个学期之后,F老师的信息课不再讲编程,小Z也从五楼机房彻底消失。从此,F中的球场上多了一个呼风唤雨的球星,而机房只是少了一个敲简单代码的普通同学。两年后,F老师被调到了高中部,离开了小Z的视线。编程,好像存在于自己的记忆当中,又好像从来没有出现过一样。

如果故事进行到这里,小Z可能像其他平庸的OIer一样,成为了OI的一名匆匆过客。可命运就是如此巧合,不经意间将小Z又从无数人走的平坦大道上拉了回来。

告别机房后,小Z觉得自己有些愧对F老师,也放不下对编程的喜爱,隔三差五还是会去SZNOI做几道题。过了三年,世事变迁,小Z从小初一变成了真正的初三,班级也从遥远的MZ镇,搬到了位于市中心的高中部。高中部不仅有久违的F老师,也与自己的母校F小隔街相望,一切仿佛回到了从前。

怀旧的小Z又想起了熟悉的SZNOI,2012年底,他突然心血来潮,一口气在网站上通过了11道题目,而正是这些提交,恰巧被F老师看在眼里。此时的小Z,已经以优秀的成绩,被选入了高中部四个班选拔出来的60人精英班,这个班除了平时会在晚上一起上高中课程以外,还有一次寒假集体前往京城的冬令营。正是这次冬令营,改变了小Z的一生。

此时,F老师正好带着自己的高中信息竞赛团队,和他们一同前往北京进行训练。在开幕式上,坐在后排的小Z被F老师一眼认出。

F老师:“我看你最近还在网站上做题呢,怎么,想学吗?”

一种熟悉的感觉忽然涌上了小Z的心头。他想起几年前在讲台上用F老师的电脑打着Pascal代码,想起大扫除的时候几个小时泡在机房的场景。他不知道自己是怎么放弃的,也不知道为什么在放弃之后仍然难以割舍。或许,自己从来就没有真正放弃过。

回到学校,小Z全然不顾中考的压力,决定开始用行动来弥补自己。他成为了物理课代表,通过物理老师的电话,再次联系到了F老师。F老师欣然接受了小Z的请求,并给他指明了高中部机房的位置。从此,小Z克制着蹴鞠的诱惑,重新来到机房学习。在F老师的指导下,他用了一个星期,遗弃了过时已久的Pascal,学习了当下流行的C++。他这才意识到,已经过去了这么多年,看似漫长的四年初中时光竟然所剩无几了。

虽然小Z学习十分主动,但F老师忙着自己当届的竞赛生,很难抽出时间帮助刚刚入门的小Z,只是给了他一个新的wikioi网站地址,并且告诉他他们这届是由G老师负责。可是小Z从来没见过这位G老师,多年的经历还是让他对F老师更加信任。于是,他开始在wikioi上留下自己的足迹。与此同时,他也发现了一位志同道合的人——隔壁班的小K。

小K是一位真正的天才,野路出身,自学C++,平时也喜欢自己写一些小程序。小Z与小K在小学时就认识,于是两人一拍即合,经常私下谈论一些编程的问题。见多识广的小K也成了小Z的偶像。

很快到了中考,尽管已经与F中的高中签了协议,但小Z还是不遗余力地发挥,考入了高中部的实验班,还与小K分到了同一个班。也许没有那次与F老师的偶遇,小Z不会如此坚定地下定决心投入OI的怀抱当中。可人生就是由无数个这样的巧合造就的,OI也一样。小Z与OI就有着仿佛命中注定的不解之缘。尽管经过了四年的铺垫,这时,小Z真正的OI之路才刚刚开始。

第二章 找到组织

高一,小Z与小K一起从自娱自乐的编程爱好者,转入了真正意义上的竞赛当中,他们凭借自己的自学功底,加入了有基础组,他们的教练正是当时F老师提到的G老师。他们的身边也多出了很多队友,这些人初三时也在高中部上课,来自贯通班,是与小Z和小K不同的两个三年制班级,而他们从初三开始就跟随G老师一起上编程课了。其中有一些曾经与小Z一起蹴鞠的朋友,比如在北京冬令营中守门的小L。有两位女生小X和小Y,小Y初中时也很喜欢蹴鞠,和小Z早就在蹴鞠场上认识。还有一位传说中的在全省拿到了第二的神秘人物小S,与想象中的一样,小S刚开口说了两句话,就让小Z感叹其强大的气场:

“卧槽!”

“真jb der!”

同小Z和小K一样,这些人的性格也十分开朗,经过短短几周的熟识,他们很快打成一片。从当初的孤身一人,到现在身边有这么多人一起学习,小Z十分享受机房里的生活。

(以下内容补于2019年7月29日/北京时间7月30日)

小Z依然刷着他喜爱的wikioi,不知道为什么,他一直觉得那里的天梯题库就是一个OIer路上的关卡,只要通过了“集训队员”、“国家队员”的题目,自己的水平也自然登峰造极。可惜的是,后来他才知道,那些头衔就和贴吧等级称号一样,只是虚荣罢了。而天真的小Z并不懂这些,只自顾自地刷着那些他认为很厉害的题。同时,在F中自己的OJ上,他也在与OJ上排名前列的“普通的C(小C)”、“这也不那也不(小牛顿)”、“Y圣”等人隔空进行排名上的比拼。那些实际上都是比他低两届的学弟们,虽然他们素未谋面,但是在FZOJ上互相脸熟的他们也就此开启了一段奇缘。

机房里的人们每周上两次课,最开始几周的小Z,迫于家长的压力,还在每周的其他几天听数学和物理的竞赛课,不过最快乐的还是在机房的时光。他们还在有一次补课时进行了快乐的机房CS大战,由于是周末,G老师自然睁一只眼闭一只眼。当时机房中的人们还没有形成完整的OI知识体系,大多数都是异想天开、发明创造式的头脑风暴,现在看起来可能很蠢,但是大家依然乐在其中。

这样的快乐时光并没有维持多久,就像五彩缤纷的初中生活,也终究逃不过一场中考的分别。没错,OI世界中的中考——NOIP就要到了。

NOIP的大名,小Z早有耳闻,但是他从未亲身经历。传说中的普及组和提高组究竟有什么区别,小Z也不得而知。但是人生中的第一次NOIP,小Z就要面对提高组的考验,这令他措手不及。他既期待着能够有一次考试来检验自己真实的水平,同时也领悟到,自己在F中球场上叱咤风云的这几年,错过的实在是太多了。但他此时并不知道,也许他错过的这些,就会影响他的一生。

初生牛犊不怕虎,初次走进NOIP的小Z依然是一种比较狂傲的心态,毕竟他初次接触OI时,机房里大部分人还在读小学。实际上小Z初赛的成绩并不理想,只是近乎于压线进入了复赛。初赛中那些闻所未闻的知识点,小Z不知道,他认为自己也没必要知道。小Z一脸好奇地首次走入了J大的机房,这个即将承载无数喜忧和起落的地方。小Z的心中并没有什么复杂度,什么正解的概念,他认为,只要自己能够把自己的想法用代码翻译出来,这道题我就必然会,每道题他都是抱着AC的心态去的。他也把G老师的“多打暴力多骗分”的劝告抛之脑后,他心里想的是,如果不能AC,做这道题没有任何意义。也许如果小Z再多一点天赋,这种想法可能助他成为一个奇才,可惜小Z只是一个凡人。第一年的NOIP,小Z碰壁了。小Z得到了0+0+0+100+0+0的成绩,连个二等奖都没能拿到,倒是很符合他“非A则0”的心态。而高一最高分小L以285分拿到了一等奖,小K的分数也超过了200。而仅仅初二小C的分数居然到了300+,令人瞠目结舌。

NOIP之后,机房走了一些人,而隔壁的大机房也搬进来了一些人。在G老师的安排下,大家轮流上去讲了一些基础的算法。小Z当时讲的是BFS,还拓展到了A*算法,但是小K听完小Z的讲解后并不买账,怀疑这个算法的正确性,坚持要弄清楚其中的缘由。这种刨根问底的钻研精神令小Z十分敬佩。其他人所讲的东西也给小Z留下了深刻的印象,比如小K的“线性动态规划”、Z哥的“水哥(小S)喜欢在贴吧水经验系列背包变式问题”、以及可能是小S唯一一次讲课的“区间DP”。

几个月后,高一的小Z迎来了自己OI生涯第一次考验:省选。最终,他爆零了,遗憾退役。呜呜呜。