首页 > 代码库 > 【随笔】玩脱了——北京比赛之感
【随笔】玩脱了——北京比赛之感
怎么开头呢?逗比边一直嚷嚷着要我写篇总结,富帅说打铁打了这么多次,哪里还有那么多地方要总结的。所以不管怎么说吧,这个打铁总结还是写一写的好。
一
简单的说,就是我们这次出去比赛,一不小心就都玩脱了又带回来两块铁牌(金牌,银牌,铜牌,嗯,还有铁牌)。当时还逗比的说,诶呀,我们第一题出了之后还是全场18名,铜牌有戏。然后,然后就卡死了,不管是什么题,全都被卡死了。
就事论事的讲,就单单从题目的角度来讲,不是很适合我们这两个队的口味。全是思维题,还全都是那种有trick的乱搞题。结果就是一旦自己提交失败了就不知道是哪里错掉了,随后就开始对各种各样的地方撸来撸去,无的放矢,直到丧心病狂WA数十发。平时训练的时候基本没有这么多乱搞题,即便是有一两道,也不会去刻意的卡数据卡题意。平时的基本上是那种大致思路对着细节考虑到了就会过,这次的除了无脑错找不到好解释。一方面是自己做题少,视野狭窄。另一方面就是平时不擅长去做这种大量的思维题的场,因为太容易跳到题目中的坑里面了,而且基本上是跳进去就很难出来。
再有就是比赛策略的问题了。一开始的时候我们的签到题都不知道是哪一个,然后看着题目大概觉得B和H都可以搞。我当时因为没有看这两个题就在慢慢的一个一个题往后读。签到题过了之后,我这里大概搞了一个加了容错的kmp匹配想去做J题(至多容错2位的字符串匹配问题),结果自己还是太嫩了太native了太弱了直接就WA了。当时的节奏还算正常,因为我这里错掉了之后逗比边和小学妹就把B题的代码搞出来了。按照规矩我把代码一打印就下来把位置让给逗比边。本来我以为是可以过的,因为那个时候确实很顺。
结果就连着WA两发。
当时我还对我的J题存有一丝幻想,因为发现了两个小错误(容错记录的那个归零位置不对,而且一旦容错一次就忘记移动模式串的指针了)。结果我上来又修改好,过样例过了自己的数据,提交。
又WA。
逗比边替下我,修改B题,提交。
WA。
这个时候我们就都处于一个类似于被激怒的状态:“我<BEEP>,<BEEP>WA哪里了我<BEEP>!”后来就是这个比赛想起来的可能是最大的失误,那就是我的错误。我以为这个题应该可以搞出来,毕竟是两个人在搞应该是没问题了,但是这个念头害了我们,因为我们都走到了思维定式里面,大家都觉得自己的想法是对的,然后就被饶进去了,然后就绕不出来了。
我那个时候还在搞我开的那个匹配题。因为我发现其实是要同时回溯两个指针才能保证正解。kmp是当回溯时判断新的指针位置直到正确或者所有可能的指针位置都用过之后才会开始移动母串的指针。但是一旦要考虑容错匹配,就可能会有第一位甚至是前两位不同的情况,这个时候kmp就会忽略掉,导致错解。但是这个时候我就想到,一旦要回溯母串的指针,那就和直接暴力搞的时间复杂度差不多了。我就陷进思维定式了。匹配问题想到了kmp,结果kmp不行,然后就不知道该干啥了。
这就是我们这次最大的问题,一旦走进思维定式就走不出来了。J题直到结束我还在想怎么样去找一个优化的kmp或者一个复杂度在O(n)的算法。而B题逗比边和小学妹也不知道是哪里的问题,开始了丧心病狂的问裁判之旅,什么能不能一开始一个位置好多树,什么能不能交错移动总之问了好多好多。他们也是陷入了思维定式里面了。
如果我们能够一起去攻一个题(事实上就是这样,最后30分钟我们的确找出了问题所在),但是我们没有。而且直到还剩10分钟我们才准备对代码进行大手术(毕竟重新写一份已经来不及了),但是这已经于事无补了。
如何在比赛里跳出思维定式,或者更笼统的说,题目的陷阱,这也许是我们最缺乏的。
回到比赛。B题无脑WA,J题想不出来的时候,我们又开了E题,矩阵快速幂,重点在于方程怎么写。小学妹写出来了一个转移方程,太紧张了太谨慎了我基本上是一点一点的问小学妹我所写的对还是不对。推出方程,上模板,第一次发现自己写的模板终于能用到一次太难得了,结果样例都没有过。
因为读错题了,还是问了裁判这个permutation到底是“排列”还是“组合”还是“置换”之后获得裁判正确答案是排列之后,才发现我们又玩脱了。这个时候我们其实都疯了,根本静不下来。老实说,如果能够安静地推30分钟,应该可以搞出来。但是玩脱了,我们直接放弃了这个可能过的题目。心态差,可以说是我们这次比赛的第三个教训。在比赛过程中,尤其是在水题无限WA的情况下,根本没有任何好心情去开题,去做题。而且更难受的是,一道有了大概方向的题最后因为这种难受而又繁琐的计算又不得不关上窗户。窗关的时候,我们就知道,这次又玩脱了,铁牌妥妥的。
二
比赛之后我就在想怎么样才能在比赛的时候跳出思维定式,跳出题目中的陷阱。那些大牛们是怎么做到的。经验是我的第一想法。毕竟大牛们题做的多,比赛玩的多,视野开阔,不像我们走在外面都带着浓郁的东大村的乡土气息。这应该是防患于未然,仰仗着自己的经验,防止自己掉到井里。肯定,这些经验都是他们付出辛劳的结果。其次,我觉得更重要的是临场发挥。感觉上,三个人同时掉到井里,在现实生活中至少是不可能的,所以我感觉,在比赛中,至少可以保证一个队员的清醒。因而,但凡掉进坑里,首先是肯定能出来,除非三个都掉坑里那就没招了。事实上,也许正是因为我当时一直没搞B题,当我去问他们这些枚举量的时候,他们终于发现了问题所在。所以,至少作为一个队员,你要相信队友,一定能搞出来。
再者,就是及时总结这些坑了。当然肯定做不到事无巨细,对于那种乱搞题,个人觉得没用。因为那种只有和标程差不多的思路反而限制了你的思维,个人不推荐经常搞乱搞题。对于那种有思维的带着经典算法优化的题个人强烈推荐,因为一石二鸟,不仅复习经典算法,而且肯定做完之后你对代码的理解更深刻了。
当然,最重要的,还是好好刷题。见多识广,才有比赛的信心。
三
这次打铁之后,我这也是三张铁牌的铁牌狗了。但是还是觉得有些进步的,至少我是这么觉得。那几次真的就是弱菜一个,就算平时做题也就是做个水题罢了。但是现在觉得搞了这么久了,大概是个什么我们自己心里也都有数了。记得当时主要学习靠顿悟,一时间曾经有段日子一天两三个知识点的顿悟,最高效的一次是一天撸通5种数据结构,虽说没有做题罢了。现在我觉得顿悟虽然能够快速的追赶上步伐,但是不做题反倒是觉得有气无力。
巨巨们太强,我只能一步一步地赶啊。
又想起了我们嘲讽数模“数模三天,ACM三年”这句话,其实就是这样,数模三天国一很轻松,至少我觉得我们这群人很轻松。但是ACM呢?kuangbin巨巨这次比赛还是没能做到捧杯,巨巨已经研一,马上就要告别这个舞台了。雷神这次比赛和我们一样玩脱了,不过还好他过了B题,一个POJrank100刷题上千的人,上帝仅仅用铜牌犒劳他的努力。还有很多巨巨,谁不是一步一步迎着汗水和铁牌走过来的?但是从来,从来都没有听到过一次放弃,他们从来都没有放弃过。我们也不会随随便便放弃,不是因为运气不好打铁打铁又打铁,是因为自己的实力弱才会打铁啊!
收回你因为比他人的努力辛劳而萌生的傲慢,也同时收回你对不劳而获和不公平待遇的偏见。偏见让我无法去爱别人,傲慢让别人无法去爱我。永远记得乔布斯所说的那句简单的话:Stay hungry, stay foolish.
四
写着写着就写的比较多了。也许就是去年两发铁牌导致的心理问题才和班里的同学有了一些摩擦,估计她看到了就知道我在说什么了。确实忙啊忙玩啊玩有的时候就主次不分了。现在还好,彻底没有时间玩游戏了,而且本身就反复提醒自己不要被游戏控制着,还好我有一个比较好的意志力。
算法,代码,工程,课程,锻炼,每天留给自己休闲娱乐的时间越来越少。看上去我也是公款出来,但基本上我们都是宾馆,赛场,餐厅三点一线而已,并不是你们想象中的“卧槽,这货又去哪里哪里浪去了…”其实,很多人也在忙,不止有你在为这自己那小小的梦想奋斗,还有很多很多的和你一样的人,在努力着,在学习着。
这次去北京难得见了智朋和邹晨,其实发现我们都差不多:苦逼的课程,呵呵的考试,社团学生会忙来忙去。硬着头皮说的话,大家的大学都差不多。不过智朋有两句话让我感触颇多,“高中是你最后一次一群人为了同一个梦想而努力的日子。”还有一句就是“大学如果能找到一群志同道合的人,一起去做一件大家都喜欢的事,那就很好了。”的确,我们有的时候都是独行侠,幻想着一个人搞定一切。但是我已经有了这样一个团队,虽然团队已经拿了6个铁牌可以改名叫Smith铁匠队了,但是用的讲总归是快乐的,也许大学之所以和高中不同,就是因为大家的目标分散了很难找到同路人了。
不管别人怎么说,这条路我是准备一直走下去了,哪怕以后改名Smith,哪怕这辈子和奖牌无缘我也会走下去。
不是为了荣誉,不是为了功名,不是为了那些所谓的加分保研。
为了自己的信仰。
For the Beginning, for the Ending.
For the Loss, for the Win.
Time never shows the pattern.
But I know the pattern,
for the fight of infinite.
晚安。
May 19th, 2014 01:21