博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个OIER奥赛之路

Posted on 2010-10-22 21:00  桃子在路上  阅读(1516)  评论(0编辑  收藏  举报

………………

标题用省略号实在是因为我自己本人也不太清楚我提笔写的到底是什么样的文字。按照常例,比赛完后应该有一篇官方的正式总结,可是这是我最后的战役,我不再有今后的比赛的诱惑,所以…… 总结便失去了它功利的意义;同样按照常例,一个还算正宗的OIer退役后应该发表一篇实事求是的回忆录,不过我情愿把我的得失交给时间去评说,却不太有勇气把我崎岖的历程再次品味一遍。 唯一能说服我动笔的理由,是我现在还能看到的09,甚至10级的OIer们,我倚老卖老地叫他们一声师弟吧,能让他们借鉴我的经验,总结我的教训,是我现在唯一能做到的了。

 形式上,我也算把我一路走来的心态,方法,学术各个方面都总结到了吧,在下的经验或许漏洞百出,只供参考对比。

心态 · 导航

 所谓的心态,是一个被社会和学生争论了无比久的问题,鄙人至今仍然认为,这东西不是语言能够很好地剖析的。昨天拜读了一下lxy写的感悟,觉得里面提到的很多东西其实很深刻。

 我将“心态”与“导航”二字并列,实在不是故弄玄虚,我先不想谈任何跟学术有关的实质性问题,而来写这个空洞的话题,源于本人这一年多走来,对心态二字的深刻体验。我不想重复那些所谓把竞赛当作素质教育的手段,以提高自己能力为目的来学习竞赛的种种言论,因为那些完全只是理想主义和官僚主义的代名词。

 很值得关注的是新选手们参加竞赛的动机和狂热程度。年轻人有斗志,信心十足着实是好事,不过高中生应该有着起码的理智和对自我的估价能力。竞赛说到底还是脱离主流的,作为一种十分特殊的事物,自然也需要足够特殊的人才能真正适合它。如果你还是一个仅仅是准备投身竞赛(当然,我指的是很认真地那种,如果你的目的只是在业余时间多学点知识,提高一下能力的话,我举四只手赞成)的高一新校友的话,我建议你先给自己一个星期的时间做一下冷静而全面的预想。本人在这儿不得不先泼冷水:事实上,竞赛是一种赌博,赢得的或许是黄色或者白色的奖牌,输掉的,也许是你整整的三年…… 所以建议绝大多数同学不要对任何竞赛有太多的幻想,无论你认为我极端也好,傲慢也罢,这是我的切身所感,请阁下务必斟酌。

 倘若真正投身竞赛,人和人之间的差异也是非常悬殊的。且不说知识与能力的高低,学竞赛的目标也因人而异。我想大多数同学较现实的目标总是希望得到赛区一等奖,这个目标是很实惠的。因为它可以不与高考的主流冲突,只需要在特定的一段时间内稍微调整一下学习重心,再加上一点勤奋和天赋,一等奖并非难事。并且得到之后就可以取得大多数同学期望的高三保送和高考调档线内加分的优惠,的确是一个不错的选择。这样的目标相对而言我个人是比较欣赏的,因为它相对现实和理智,不过在下依然忠言逆耳:如果知道高二都没有得到赛区一等奖的话,强烈建议不要对高三的NOIP抱有任何希望,果断地放弃是明智的选择,这种放弃不是退缩,而是清醒与成熟。

 乱世塑豪侠,浪花淘英雄…… 在我观察,每一届学生都会涌现出几个(不会多于5个)真正适合于OI高端竞争的选手。这些选手是非常优秀特殊而不可多得的。在大浪淘沙的选拔与自身的进退的影响下,能坚持到底的选手的确令我钦佩。如果想走这条荆棘遍地的险路,我总结了以下几点必备素质,供权衡:

 1.智商处于整个中国的前7.5亿范围(按中国人口15亿计J)。

 2.家长非常尊重学生的选择与意愿。

3.身在理科实验班,或者在班主任非常开明的平行班。

4.也是最重要的,要确信自己有,或者至少通过努力能培养出非凡的坚忍不拔的意志品质和承受压力、打击、挫折的心理素质,以及由踏实钻研,实事求是的严谨治学态度。 以上这些看似不是什么难事,不过还是希望认真考量,尤其是第四条。

NOIP · 闪袭

 “闪袭”这个词是我对高一NOIP的切身感受。我比较推崇的一种做法的是,在高一第一次NOIP(大概是在第一学期的11月中下旬)前突击强化训练,并且得到一等奖(即使分数很低也无所谓)。之后的选择就可以游刃有余。选择就此退出,虽然不免有投机取巧之嫌,不过从长远来看,这是一种走保送道路的非常好的安排;如果选择继续进取,在入校不久就获得很多其他竞赛三年都可能得不到的复赛一等,无论是对提高信心,丰富经验,还是对应付班主任和科任老师以及家长都增添了一个扎实的砝码(这个想法显得有点猥琐,不过这种压力是确实存在的,处理起来也并不是件容易的事情)。

对于希望在高一NOIP就想冲一的同学们,我很佩服斗志与野心,鄙人虽不才,不过高一一等奖还算是侥幸得到,并且分数还看得过去,所以愿意给出一些不成熟的建议,希望能对阁下有帮助。

首先,心理上要有信心。可能有同学会有顾虑,认为自己初中只马马虎虎学了下语言,至于更多的东西完全没有接触过。其实,从我亲身体验看来,NOIP 一等对学术知识的要求是很肤浅的,也就是说,只要能熟练掌握信息学竞赛基础章节中的基础部分——朴素的搜索,朴素的动态规划,加上一点油滑的考试技巧,一等奖并非难事。

 细说开来。朴素的搜索和动态规划相信老师会有所讲授,不过仅仅是讲理论上来说不容易理解,毕竟这些都是非常抽象的理论。重要的是不要畏惧,认真自己多研究研究,写写,画画,想想…… 入门艰难是信息雪竞赛的一大特点,因为算法策略上的模型与我们平时习惯的其他学科的思维方法和逻辑形式都有巨大的差异。举一个我自己的例子吧,信息学中有一个是非基础而且简单的部分:搜索策略中“广度优先搜索”的原理,可能在一些读者看来都是皮毛,而不值一提的,可是当初我硬是花了半个月的时间来理解,现在想来似乎不可思议,但其实并不奇怪:在初学OI各方面知识储备都几乎是空白的时候,理解一个陌生理论,尤其是基础理论模型,的确需要迈过很多障碍。我说的这只是发生在我身上的一个例子,阁下在学习过程中可能会遇到其他的,在高手看来匪夷所思的问题。不过我认为这都是正常的,也是一个成熟的选手成长所必须经历的东西。我们需要的只是一种态度,那就是平静,切记不要浮躁,不明白的就多花点时间来想一下,实在困难的可以向周围的高手请教,不过我个人还是比较推荐凡事用自己的智慧来解决,也许这会多花些时间,可是这个过程对思维的锻炼和带来的深刻理解比起这些时间都是绝对划算的,为什么不自己去体验一下“复行数十步,豁然开朗”的感觉呢?

 上面曾经提到“考试技巧”这个名次,这恐怕是信息学竞赛独特的小插曲,因为在比赛中,即使面对自己完全不会做的题目,也应该能根据自己的经验“cheat”一点分。这个手段得到的分数累计起来往往是非常可观的,这里我不想具体介绍这个问题,因为前辈已经有资料介绍得很精辟了,建议阁下去网上找一篇叫做《骗分导论》的论文,仔细阅读后相信会有很大收获。

 另外一个非常重要的问题,就是编写程序,这个部分实在重要,我会在后面专门提一个章节来阐述,请务必不要忽略。

高端 · 赌博

 我很欣赏天府早报中对我们几个专访的标题:“两年背水一战,赢了”。 一个“赢”字意味深长…… 对于立志于冲击OI竞赛高端境界的选手来说,整个过程就是一种赌博,它惊险刺激,耐人寻味,却又充满着风险与挑战。我们必须认识到的是,在现在这样高手云集,豪杰群起的后OI时代,有夺取NOI奖牌的野心,势必需要(至少按照cdqz的惯例是这样的)放弃所有文化课程专攻OI ,这样做无论是老师,家长,还是自己都是会背负巨大心理压力的,它的风险不言而喻。我这里还是把它挑明比较好:万一拼到最后在省组队赛的时候落马或者全国比赛时考得太烂以至于无法推荐大学…… 这种情况并不是没有出现过,如果真走到那一步,我想唯一的选择就是回去继续冲刺高考(自我感觉那时候再幻想保送生考试已经不太现实),甚至有可能被迫复读一年…… 这些虽然是我们非常不愿意看到的结果,但是它是客观存在的,在下认为,我们应该拼尽全力去争取最好的结果,但是需要随时清醒地认识到最坏的结果也是有可能存在的,这一点必须要非常坦然,否则对学习状态和考试发挥都会有很不利的影响。

同样,作为一个“过来人”,我仍然愿意把我自己的成功与失败总结成经验教训,希望能对读者有所帮助。

 由于NOI与NOIP对选手的实力和考试经验要求程度有着巨大的差别。所以,即使一个高一就拿到NOIP一等的选手想冲击高层次仍然有很长很长的路要走。在这个过程中,“越学越发现自己的无知” 是很多选手的切身感受。当你发现自己陷入一种不知道该从什么地方入手学习,或者发现自己突然变得什么都学不懂了,这是非常正常的现象,不用怀疑自己的能力。平静自己,把纷繁复杂的知识都先放一下,暂时忽略一下紧迫感,相信来日方长。并且从一种比较容易入手的知识领域下手,先学容易的。本人愚见,如果在算法上真的有些陷入泥潭的话,不妨从数据结构方面找突破口:线段树,树状数组,平衡排序树,这些基本数据结构学习起来都相对容易,而且在实际竞赛中非常实用!花一些时间,一来,去掌握这些知识的原理,会对思维有很高的提升;二来,这类数据结构的习题是很好找的,多编写一些数据结构题,对编程的熟练程度和思维连贯性都有巨大的帮助。

算法虽然说包罗万象,不过还是一句话:由浅入深。根据我的经验看,也有一些简单易学却实用价值非常高的基础算法,这些应该无条件的熟练掌握,并且形成对它们的经验积累,这些算法大概有:

图论方面的Prim,Kruskal,朴素的Dijkstra,Floyd,简单的Bellman-Ford算法。

搜索方面的:简单的可行性剪枝,简单的最优化剪枝,简单的启发式搜索,简单的A*搜索。

以上两个领域我提供了一些入门的突破口,希望阁下务必熟练掌握其中的每一项,并且熟练编写程序框架,达到游刃有余的境界。其中,很多名词被我缀以“简单的”,或者“朴素的”,这是有原因的,因为当你知识积累到一定程度的时候,这些基础的东西还会派生出很多相对深难的东西,不过这都是在基础知识扎实的前提下出现的,所以可以作为了解,但切莫苦陷其中,孔子曰:“学而不思则罔,思而不学则殆”就是这个道理。

提高 · 不积跬步无以致千里

现在回过头看来,我从一个什么都不懂的新手走到现在,自己都很难说清自己水平能力的提高到底是个什么样的过程。不过我依旧很推崇一点: 温故而知新。我们不能总在已有知识水平上停滞不前,但是更要杜绝好高骛远,不切实际的态度和方法。

有的选手总是将自己的视野禁锢在一个自己知识水平所限制的深井里,不愿意,准确地说是没有勇气去挖掘和钻研一些更深难的知识。 我们说,扎实的基础是非重要,可是高端的竞赛是知识广度与深度的全面比拼,如果整体知识水平和思维能力总停留在一个低级的水平,那么想在大赛中取得理想成绩是非常困难的。信息学竞赛本身就是一种挑战,所以,我们应该充分地拿出自己挑战一个又一个知识高峰的勇气与毅力,不断向新的算法或者数据结构迈进,这样才能真正的成长起来。

 凡事必有度,世事总有两个极端,我之所以更为强调不要好高骛远,是因为我自己就走过这样的弯路。那是一种看似进步很快但是却经不起考验的泡沫。 有的选手热衷于看很多书,想很短时间内学到很多高深但不切实际的知识;更有甚者,刚过了语言关就沉迷于诸如《算法导论》,或者国家集训队训练题,或是一些很高端的比赛题解…… 这些连高手看来都很冒汗的东西是不适合——至少很长一段时间内不会适合连基础知识和基本编程能力都还很薄弱的选手。

 我提倡一个比较中庸而成熟的学习方法,就是在不断巩固,深化,磨合现有知识和能力的同时以渗透的方式扩展自己的广度。具体到行动上,就是以题目为索引来决定要学什么。整个信息学竞赛其实都是泡在题海里的,无论是平时自己网上的练习还是老师给的套题考试。对于自己会的题目,如果不是特别弱智的,建议都认真编写程序AC它(对于新手,我还是建议对任何会做得题目都事必躬亲,思维连贯性和编程熟练度都是靠一点一滴堆砌起来的,这一点后面会有所讨论);对于不会的题目,大致分为两种类型:

1.题目纷繁复杂或者思维难度高,自己没有想到。

2.题目中包含了自己尚未接触过或者尚未掌握的知识系统或者知识分支。

 对于第一种题目,在一定限度内是价值很高的,从一开始思考但无法解决,到看论文或者题解或者跟他人讨论理解做法,整个过程对思维的提高都是很珍贵的。在明白它怎么做之后,最好多注重一下它的核心思想,并且保持一种敏感性:在遇到3次某种类似的思维方式去解决问题的时候,一定要总结它的共通点,让整个思维网络的桥梁更加密集,这样假以时日,你会发现自己开始对题目形成一种“感觉”,这便是能力的体现了! 最后,还是那句话,最好完成程序的编写,并且力求AC。

而对于第二类题目,一种自然而然的想法就是去学习题目中体现出来的自己尚且不会的知识,即使这个知识点很偏,只要它不是难得离谱的那种东西,那么我们就为了做这一道题而去学习它也是值得的,因为能力非朝夕之功,不要期望做了某一道题就有了多么大的跨越,循序渐进是亘古不变的真理,只有当你回头把此时的自己跟几个月前的自己对比时,你才能体会的平时的枯燥没有白费。我们用所学的知识来解决题目,而题目本身又是指点学习方向的指南针,如果能找好这杠杆支点的话,必将事半功倍。

迷信 · 边缘文化

OIer是非常迷信的,正如所有商人都怕鬼一样。

熟悉七中信息学团队的选手应该知道,一种带点灰色幽默的迷信言论不知什么时候开始进入我们的思维。

首先,解释一个词语:“RP” —— 这个词语在全国各地的OIer之间广为流传。 词语原型:“人品”一词的汉语拼音生母大写。

它的引申方式颇为有趣:由于我们默认“好人有好报”,所以自然“人品(RP)”好的人也会比较幸运一点,考试就会考得好一点,或者幸运地压线得个金牌什么什么的。 因此后来逐渐被引申作某时期内个人的运气和状态来使用。 而且还有杜撰出一套非常猥琐的RP原理体系……

一些很可笑的例子并不少见,诸如考试前为了积累所谓“RP”而非常积极地请其他人吃饭。 考试前往别人兜里塞些钱来企图换取“RP”……

我最初认为这种认知方式会使人变得容易投机取巧,脱离唯物主义的评判标准和实事求是的处事态度。不过在自己长期接触和感受之后,我渐渐感觉到,这种看似很可笑的思维和行为方式其实是OIer——尤其是高层次的选手在巨大的学习和精神压力下所寻找的一种归因和排遣的方式。它的出发点本身是健康的,而且如果深入分析的话,我认为它体现的是成熟的选手们乐观的竞技心态和伟人般的革命浪漫主义情结。 所以……如果从事信息学竞赛的话…… 多多积累点RP吧。

编程 · 纸上得来终觉浅

我把标题加红表示我非常强调这一点。 信息学竞赛所比拼的内容一个是抽象模型和求解问题的能力,另外一个大方面就是编写程序和调试程序的能力。

 我之愚见:提高编程能力的确没有捷径可走,只有靠量的积累才能带来质的飞跃。有一个比喻很恰当:水桶的容量总是取决于围成它的最矮的那片木头。 一个思维与编程严重脱节的选手是不会在比赛中有理想的发挥的。现在总结起来,我的竞赛之路之所以坎坷,跟当初高一的时候犯这种错误不无关系。无论你思维多么的活跃,OI竞赛终究不是口试,选手必须有熟练的能力将自己的想法翻译成实实在在的代码程序,而这并不是个简单的事情。

 我上文中一再强调,尽可能亲自用程序实现自己接触到的力所能及的题目。我承认,有些题目的程序编写起来确实非常恶心,但是如果自己都完成了对题目本身的剖析,却在编程这一步前停下了,那么题目的价值必将大打折扣。而反过来,当自己编写的几百行的程序真正AC的时候,一来对信心的提升有很大好处,二来,潜移默化地,自己的程序能力也在不知不觉地提高。

 提到编程我就不得不谈谈调试。没有任何一个程序员能够牛B到保证自己的程序都能一次正确。几百行,几千字的程序出错在所难免。 调试的方法个人喜好不同,有人喜欢在IDE下调试,有人喜欢用命令行; 有人习惯用调试器,也有人习惯穿插调试信息。 方法无所谓对错优劣,只要适合自己的就是好的。

而我想谈的不是具体的调试技巧,我想的是要端正调试的心态。

 其一,编写程序之前就要把思路理清楚,编写过程中也尽量力求谨慎,绝对不要把过多的希望寄托在调试上,应该尽量争取程序能直接过关。因为竞赛的时间是非常珍贵的,如果平时不训练出编写程序的准确度的话,正是比赛时花大把的时间去调试无论是对考试心情还是时间分配都有很大的负面影响。

其二,调试的时候心情要坦然。有些错误隐蔽极强,需要细致的观察调试信息才能捕捉到,这时候如果急躁的话,很可能会忽略掉能够发现错误的调试信息。

 其三,这点主要是说在比赛时,千万不要动不动就把自己书写的某个程序整个删掉。就算你认为这个程序的确需要重新写,那也一定另开一个文件而不要轻易毁坏已有的程序,不管怎么说,那段程序或多或少都有它的价值。

闲碎寄语: 竞赛决不是捷径,它只是另一种艰辛的生活方式。

 爱情不是蜜,但能粘住一切; 竞赛不是火,却能点亮一生。

得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。

我不会永远成功,正如我不会永远失败一样。

 高2008级13班 洪骥 2007年9月