南京赛区的现场比赛时间是2007年10月28号,至今已经快过去半年。
我本来不打算再去回顾这个历史,只希望它在我生命中作为一个符号而存在,永远不要去思考细节。可是,半年的挣扎,我始终无法做到肃清脑海中的阴影,对于那段时间周遭的嘲笑,我早就已经学会像木头一样去接受,可是,我却不能接受自己成为一块木头,我必须要完完全全的走出来。
可能会有很多人不理解,一次小小的比赛就能挫折到如此,可谓茶余饭后的笑料。不过,那种钻心的难受是我之前走过的20年路里面少有的,而且随着时间的增长伤口却没有愈合。我已经下了很久的决心一定要把这些事努力的回忆起来,记录下来,可是总能找到十足的借口加以推托,我已经被折磨了许久,我不想再耗下去。
第一天
这一天的主要任务是参加开幕式和下午的热身比赛。我们队本来是不打算参加开幕式,因为恰好和TopCoder四川的Tour比赛冲突。由于这次Tour的奖品非常丰厚,而且加之四川的有实力的人基本上掐指可算,因此参加比赛并拿奖的心情一直驱使着我们一到南航便一路狂奔到附近的网吧。非常不凑巧,那间网吧连Topcoder的速度非常慢,我们提前了十分钟到达,却依然没能在规定时间内注册上,于是,大家都很泄气的在那里观看了一下比赛的情况便走人。
回去只能去参加开幕式,就是些众所周知的领导讲话等形式,我们自然也没什么心情听。不过那时的我还比较乐观,还没有把奖品当一回事,于是一直和队友分析上报队伍的情况。我跟队友说了些什么我不想再说了,总之,一切都太乐观了。
开幕式很快结束,匆匆吃过午饭便赶到了比赛现场。现场的气氛的确非常的压抑,至少在比赛开始之前我是一直都没有很好的心情。不过还好,当打开试题时我紧张的心情一下就好了很多,精神也能迅速集中,这倒不是因为题目很简单,而恰恰相反,这次的热身题目有相当的难度,只有一个较简单的题,而且第一个过掉题目的队出现已经是20分钟左右的事情。我们三人拿到题目也迅速分析了题目的类型,A一开始没有思绪,B是一个推公式的概率,于是我的两个队友马上就扑了上去准备拿它开刀。我默默的看着C,一时由于数据规模太大而没有思路,于是和A题换着想了好几遍,终于还是找到了突破口就是dilworth定理和线段树,只是需要推导一个O(1)的判定条件。此时队友还在很卖力的推导B的公式,而排名上已经有20几个队过了B。于是我打算上C的代码,还好比较顺利,只用了15分钟左右写代码和调试并通过neotium给的一些数据。此时刚在几分钟前有人2Y了C,于是我抱着必死的心情忐忑的提交了C。由于第一次使用文件输入输出,忘记用fopen输入数据,所以第一次提交就TLE掉,发现问题马上修改,再提交,等待了一分钟居然返回Yes,我自己都惊了一下,这是我没有预料到的,于是很兴奋的告诉队友AC了,还搞的旁边的队伍好奇的探头来看Yes是什么样子,这样,我紧张的情绪一下完全就消失了。
队友继续在搞B,交了两次都是WA,于是他们继续改进公式。我现在已经非常轻松了,所以很快A也有了思路,发现就是一个最小权闭合子图,用最大流求解即可。这个时候,队友神奇的将B给过掉并且由于我已经知道了A的算法,同时发现机器能够连接到外网,于是起了邪念并且一发不可收拾,跑到POJ去下了一个最大流的代码,然后改了改便提交了,WA了一次后很轻松的AC掉它,至此做掉所有题目并且总排名在第8(最后结束时好像落后到10几),我自己认为比较满意(虽然我知道有很多队伍都是没有像我们一样认真在对待,但是我对自己今天的状态还是比较满意)这次热身结果,于是再次做了一个错误性的决定,提前走人。
现在回头来看,自己当时真的很傻。虽然我不相信RP这种东西,可是在比赛现场贴代码便已经反映出了我一个很大的问题,便是对自己的不自信和对模版的依赖程度太高。可是,我自以为是的表现让我没有去发现自己的问题,假象蒙蔽了双眼。
由于我和neotium没有带饭票,于是赶车回宾馆去拿。在回来等公交车的时候,发生了一件非常神奇的事情:我当时觉得无聊,然后正好手中有个硬币,不知为何我突然想到了具体数学上有一章说的一个游戏,意思就是每个人说一个人头和字的序列,然后开始执硬币看谁的说的序列最先出现。当时neotium还问我是不是知道什么结论才和他玩,我就说这个东西是有个好像是Conwey给出的结论,但是更简单的方法可以用Markov过程来做。然后我说Markov现在很火,估计明天可能会考,结果,正如大家所知道的,南京赛区的正式比赛中就恰好有这么一个完全一样的题,只不过用了0-9的数字代替头和字来形成序列,不过这道题我也是事后才知道,比赛的时候早就完全顾不上去做这么个题了。
回南航吃了饭,遇到川大的Windy7926778一行,和他们简单讨论了今天的题目,于是便坐车回了宾馆。当天晚上我真的非常轻松,因为我本来南京此行的目的不是要拿到多么辉煌的成绩,而今天的表现又证明我很在状态,于是,晚上和领队还有队友聊得非常开心,并没有觉得有什么事情正在悄悄的临近。
第二天
如期,我们到达了比赛现场。时隔一天我再次坐在这里,我并没有感到有如昨天那般的紧张,反而有些兴奋,这是个非常反常的状态,比紧张更可怕。
比赛开始了,我依然是看ABC三题。A我觉得题目描述有问题,和neotium商量了很久也没搞懂题意,于是就先放了。B我读完就觉得是个线段树的陈题,连半点思索的空间都没留便立马开始上机敲代码,而这时比赛才刚刚开始了十分钟而已,我的太过于乐观的心态没能让我把问题分析清楚就开始漫长的一个小时的coding。当我终于反应过来题目很难时(事实上最终也没有队过这题),已经是1个小时零几分的事情了,这个时候已经有比较多的队过了最后一题,还有零散的队伍过了其它题目。我的这一极其错误而没有被制止的行为(事后分析,因为队内当时只有我懂线段树这个东西,我只要比较肯定的说出是用这个方法,就不会有人帮我Review,我想这是一支队伍的悲哀所在),给最后的败局奠定了坚实的基础。
我马上放弃了B,转而去做一个最长弱重复子串的题目。这是一个非常经典的问题,并且是我事前在POJ做过的一个原题(但是我在比赛时却完全没有反应过来,以为是个新题目),一个编码很简单的算法就是后缀数组,另外一个按道理可以过的方法就是RK。因为已经落后了,我便没有想那么多,很快条件反射一样想到了二分枚举答案,自然接下来就联想到用RK来验证。离队友给我说题目不到一分钟的时间,我便自信满满的说方法绝对没问题,很好编码,我可以很快敲出来(那个时候,再一次没有人站出来反驳我)。队友自然很高兴,于是他们便又把机器让我,在一边思考已经有好几个队过了的最后一题。RK我自然比较熟悉,不过由于比较慌张,所以敲代码时居然犯下了一个非常低级的C语言编程错误,忘记将宏定义中的变量用括号括起来,这便是我队最后失利的主要原因之一,因为找到这个错误时比赛只剩下两个小时不到。这份代码,我前后不知道打印了多少份,开始是以为只用了一个基来取模判断精确度不高,后来一直改到三个基数取模仍然答案出不来。凭借我对RK算法的了解,我觉得要是真能把数据做到让如此的小概率事件发生,出题人去破个hash加密算法绝对能力有余。可是,这个时候比赛已经进行到了第三个小时,周围的队伍已经陆续升起了气球,前面的合肥工大的队伍更是已经有三个气球了。我的心情完全乱了(事实说明,我冷静分析把握大局的能力的确很差),摆在面前的午餐哪里有心思去吃,可是又实在没想出来那个字符串的题哪里有问题,而且队友负责的最后一个题也被告知很难没什么想法(估计他也完全被吓住了)。我一时不知道该怎么办,打算让队友来帮我找错,其实就是想让他帮我随便乱改一下说不定有效果。他不知道算法当然不敢碰,只是看到我一个地方为了省时间在for循环时写的i < N / 2好像有把握改改不会影响算法主体(我的N定义是 1 << 18,看出我为什么错了吧),于是随手编译一测试便通过了自己做的几个数据。我大喜,感觉是事情一下有了章法,看到了曙光,可是我连续交几次都是WA, 再次收到沉重的打击(至于另外一个问题,我便是比赛结束也没有发现,很可惜,估计是我后来又用的取一个基做模导致的)。
后来,我放下这道题目,和队友一起分析最后一题。由于3个半小时还完全没气球的状况已经让我感到非常的压抑,所以思路便根本打不开。后来不知谁说了个不知是不是动态规划的话,让我一下如梦初醒,立即判断这就是一个非常普通的DP(事实证明我这次没有判断错误),可是我觉得自己今天手背,就让neotium去写,我在一边给他看着。由于题目的确太简单,他很快就写好了,测试了样例没问题便直接交上去。
等待返回结果的这段时间是非常漫长的,我多么希望来的是个Yes,说不定士气就可以被重整。可是,命运就是这样,No仿佛如约而至,一下我的心理防线就开始有点崩溃了。我转过头去,看着窗外,一瞬间就像我已经忘记自己在比赛,看着远处的景色发神,此刻我真的已经绝望。好在我的队友没有和我一样,他立即开始着手改代码。代码真的没什么可以改的,我是看着他一个字一个字的敲进去的,如此简单的逻辑,不可能有错。事实也证明我的猜想,我们的代码的确没有错,在他也很无奈的提交了数次后终于也支持不住了。此刻我真的想哭,昨天的我绝对没想到今天在封board的时候我们居然还没有出题。大家郁闷了一阵,于是提出重新读题看有没有读错的地方。很快,neotium发现有个地方他之前理解错了,于是很快改掉便提交,系统终于在漫长的等待了近一分钟之后返回了Yes。
我们相视一笑,neotium说了句我们终于没有报零,我苦笑,我重来没有认为自己是以零的突破为目标的选手,我不至于这么弱。可是没办法,比赛始终是无情的,我的第一次ICPC区域赛生命只剩下50分钟可以走了。
我让neotium继续帮我看之前还没过的字符串题目,我便去开了个新题(事实证明这又是一个非常冒险的策略,是一次傻瓜式的冒险)。新题又是一个字符串,讲的是一个长字符串可以有多少种方法被许多给定的短字符串给组合出来。规模很大,长串有10,000的长度,短串总长为4000,每个串最多长100。最浅显的DP自然就是O( 4000 * 100 * 10,000 )的复杂度,不可能对。可是,在那种完全失利的情况下,我还能想出什么好方法?我能想到Trie?我自然又往RK上去想了,其结果大家肯定也很容易猜到。
比赛最后2分钟,我疯狂的对这两个字符串题目做修改然后提交,一共提了5次,可是上帝不与我同在,无一幸免。
于是,比赛结束,打开board一看,倒数第8名,恰好和昨天的热身赛结果做了颠倒。我想,这对于一个真正在过去的日子里付出了很大的努力来做ICPC的所有人都是难以接受的事实,我无奈的坐在那里,眼望着别的队伍手握气球在照相,我还能干什么,我已经没有事情可以做了,哨声一响我便成了孤儿,我唯一的事情便只有收拾书包。
那一刻的失落,可能只有经历过赛场的人才能有所体会。我们从成都带来的一切希望顷刻变为幻想,只有我和队友之前打趣说的拿铁牌我们就走路回家的玩笑话最有可能成为现实。其实,当时我的心情并没有现在说的那么难受,反而我是三人中最先开朗起来的,还不断的安慰同伴,就连我自己都不知道这原来是假象,在听Sun的讲座时我突然就崩溃了,一下子变得根本没了理智,毫无救药。
以至后来的颁奖典礼,我现在已经记不得是什么情景,只是还记得老师让我们三人上主席台合影留恋,我死都不去,我害怕面对台下那一双双冰冷的目视着你的眼睛,一时已经无法再有任何勇气可以将自己暴露在空气中。
坐了车,回了宾馆,老师自然心里对我们是完全的失望。不但如此,我仿佛开始觉得所有人的目光都开始变得犀利起来。
为了逃避现实,我们去了附近的网吧玩CS,夜深回去睡觉,没有人多说什么。
第三天
本来打算在南京旅游的行程也完全取消了,那个时候已经没有理智作出任何的判断。我们买的火车票是晚上6点,于是花了些时间去紫金山天文台看了看。整个过程我们三人已经开不出什么玩笑,而我更是连照片都害怕照,于是草草结束了行程,到市内随便找了个公园坐着,可是我无时不在回忆着比赛的场景,一幕一幕的重复,无休止。
终于,上了火车,离开了这个有着无限回忆的地方。
总结
关于我自己,我只想说是态度害了自己,好的心态是成功的一半绝对没错。我从来没有认为我们的队伍烂到如此地步,拿到这样的成绩的确和自己的努力太不成比例,这也是造成我无法接受结果的一个原因。
最后,我想说,ICPC的赛场是一个局面极端容易失控的地方,每个选手都应该在赛前做一系列的充分准备,不要只局限于嘴上讨论遇到什么问题该怎么解决,在比赛时乱起来是没有章法的。还有就是,错一次,即使和我一样在南京遇到与此的挫折,也不一定就可以完全学会如何控制自己的情绪,比如我,在之后的成都赛区又一次遇到了类似的问题,我依然处理的很无奈。第三点非常重要的事情,如果你不是一个非常厉害可以一手遮天的人,那么请不要在平时训练时和队友分头负责做哪些类型的题目,一定得有个交集,不然将导致最后互相听不懂对方说的什么东西,这有违团队理念,必将受到制裁。