追求神乎其技的程式设计之道(三)

来源:百度文库 编辑:神马文学网 时间:2024/04/29 05:32:24

劲敌

热血的少年漫画都有一种标准公式,热血但什么都不懂的主角,加上一个天才劲敌的刺激,让主角能在不断遭遇的困难和挫折中不断爬起来进步。就像火影忍者中的鸣人和左助,或是棋灵王中的进藤光与塔矢亮,要进步最快的方法就是找到一个远远超过自己的劲敌作为目标并且努力打败他。

我在高一时参加校内的资讯能力竞赛初赛,在都还搞不太清楚要比赛什么东西时就去参加了。当时只会用BASIC,知道要用笔写程式时还吓了一跳,还怀疑阅卷老师难道能在头脑里执行程式吗? 我记得那题目不难,我每题都有写,但最后只拿了个佳作,离学校的代表队还远得很(话虽如此,我也是唯一有得奖的高一生了)。过了几个月,我非常惊讶的发现台北市的资讯能力竞赛,竟然有一个建中的高一生SBB拿了一等奖,更可怕的是他接下来又在全国能力竞赛拿到二等奖,才高一就已经有能选上奥林匹亚国手的气势,前途无可限量。

受了他的刺激,我非常拼命学习,先花一个月自己把C语言学起来,接下来就到图书馆借回所有有关资料结构和演算法的书,每天都拼命看。这是我进步最快的时期,当时我在家自己跟着已经进入IOI培训营的选手们一起练习ACM Online Judge上的题目。每天到学校都在看Introduction to Algorithms,因为没有电脑,只好用纸笔练习解ACM Online Judge上的问题。白天在学校想解法,回家就在电脑上把程式写出来,并submit上去看看结果对不对。透过这种方式练习,可以看到自己解出问题的数量不断增加,强烈的成就感能刺激自己不断练习不断思考,如此循环之下真的进步得非常快。

很快地,在我升上高二后,我发现我已经写了三百多题,进入ACM Online Judge世界排行榜的前几名了。同时我也发现有另一个跟我一样每天都增加好几题的人,没想到竟然就是跟我同年的建中SBB。虽然我每天都能写两三题,但SBB的解题数仍远远在我前面,逼得我只好印出所有题目,带去学校不管上课下课都在纸上解题。就这样我们的差距慢慢拉进,不知不觉我们也站上排行榜的前两名。如果我今天多写一题,我就能暂时站上第一,但隔天马上又会被他超越过去,彷彿他早就已经囤积了数十题起来等着慢慢折磨我一样。

就在这样的刺激下,我就像漫画中的热血主角一样快速成长,进入了劲敌所在的境界。我顺利从校内初赛、中区预赛,一路拿第一进到全国决赛。非常戏剧性的是,在这年全国能力竞赛,SBB拿了满分得到第一,我错了半题排名第二,而全国能力竞赛一向是前两名都为一等奖,也就是说我和SBB原本应该都是一等奖,没想到评审说我和第一名的满分有个落差,所以一等奖就改成一名,而我就变成了二等奖第一…(实在很呕,但也不能怎样Q_Q)。比赛虽然输了,但我没有很难过,因为我知道自己还能再进步,还能变得更强,继续努力下去我很可能可以选上奥林匹亚的国手。

国手之路

高中各学科的奥林匹亚是每年一度的国际盛事,奥林匹克运动会比的是人类体能的极限,而各学科的奥林匹亚比的则是运用脑力的极限。我第一次是从YJL那听到这比赛名字的,但那时觉得非常遥远,因为我看到连他这么厉害的人都选不上国手,可见这不是一般人能轻易踏进去的领域。

改变我想法的是中一中穿堂的一张照片。中一中有个不错的传统,只要代表学校参加比赛或科展获奖,学校就会把获奖学生的照片挂在穿堂的荣誉榜上。还记得高一时在穿堂闲晃,一个个欣赏歷届学长们伟大的功绩,突然间发现有个叫CLK的学长厉害得不得了,不但在中区能力竞赛拿第一,到了全国也还是第一,而且他还选上了97年IOI的国手。后来我才知道他以前也是中一中电研社的社长,而那届的副社长也非常厉害,自己写了一个microkernel作业系统代表台湾去美国参加国际科展。有这些如传奇一般的学长,给了我很大的激励作用,我这时突然觉得自己或许也能像他们一样有照片被挂在上面的一天。现在想起来,还真不知道当时自己怎么能这么有信心,其实有种不知天高地厚的感觉。但或许也因为如此,才没有被这种「看起来很困难」的目标吓到而连尝试的勇气都不敢拿出来。

很有趣的是,在我刚上高一时,CLK是中一中第一个也是唯一一个资讯国手。但就在我高一下的时候,有三个高三的学长竟然同时选上99年IOI的国手。因为一年资讯国手名额只有四个,一直以来都是建中学生唿声最高,这年我们一口气拿下三个名额简直是不可思议的奇蹟。我也因此而信心大增,彷彿我每天在他们旁边练习也能受到逸出的强者气息感染而变强一样。

就在我在全国能力竞赛拿到第二名后,我就开始为IOI培训营做准备。IOI培训营大约收30人,要关在师大内集训四週,每天都请教授来上课,每週进行一次模拟考。第二个礼拜结束会先淘汰一次,留下来10个人再继续厮杀,直到四个礼拜结束。培训营过后不是马上就能知道成绩,还要过一段时间才会知道四个国手是谁,但因为留到第二阶段基本上就等于有了保送任何大学资讯系的资格,所以第二阶段的气氛其实还比较欢乐一些。

在师大集训的四週让我认识很多在这个领域顶尖的强者们,我觉得这更胜于实际上在课堂上学到的东西。这些强者们如今都还持续在资讯界的各个领域活跃,常常觉得不管到哪参加活动或研讨会都还是可以碰到这些有相同背景的人,可见这个培训营真的也训练出许多资讯界的中坚份子。

在集训时,大家也不是每天各自闷着头写程式。其实很不好意思说,当时在培训营进步最多的可能是魔法气泡对战的战术…。虽然有电脑就会被拿来玩电动,但培训营的学生还是比较特别。每年培训营都会流行一些能用程式写AI来决斗的游戏,像是坦克大战、俄罗斯方块等等,我们那年流行五子棋,大家利用空闲时间写五子棋的AI,碰在一起时就让各自的程式互相决斗分个高下,玩起来比自己亲自下去玩还刺激很多。

经过四个礼拜的集训,每天讨论演算法,每天写程式,到最后连睡觉都会梦到程式码。当时因为才高二,也不会觉得压力很大一定要留到第二阶段甚至要选上国手,一直抱持平常心反而意外表现得不错。结训过后,我每天没事就盯着培训营的网页看,希望能赶快看到国手名单公佈。就在名单公佈的那天,我盯着萤幕惊讶的说不出话,我竟然真的选上国手了!这真的是平常完全不敢想像的事情,真的没想到我竟然也有一天能让自己的照片被挂在中一中的穿堂上….。