一位ACM过来人的心得

刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?算法

我想说下个人理解。
不少ACMer入门的时候,都被告知:要多作题,作个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。
编程

我以为通常状况下,对于咱们普通学校的大学生,各方面能力的差距不会太大,在这种状况下,训练和学习的方法尤其重要。网络

其实,500题仅仅是一个标志,并且仅仅表示你作ACM-ICPC有必定的时间,学习

咱们训练的目的是什么?我以为有四点
一、提升编程能力
二、学习算法
,(读书,读论文,包括作一些题目验证)
三、准备好面临将到来的挑战(熟悉题型,调整心态)
四、启发思惟。
测试

这里四个目的,从训练的角度上,重要性逐次递减;为何呢?
由于前面的因素是后面的基础。而是后面的目的,想达成越为不易。我以为前3者能保证你ac掉你能作的题,即便难题始终不会作,也能够ac掉中等偏难的题目。
ui

而须要必定思惟难度的题,要之前三者为基础并且属于训练的后期,中期只能做为偶尔调节。固然,我思惟也烂得要死,对这点没什么发言权,你们能够鄙视我。编码

我这里想主要说下第2点。spa

对于算法,我发现,不少咱们这样的弱校ACMer选手没有侧重好算法的学习。
下面要讲的几点,可能都很老套,但我想以035对比我本身的例子给你们作说明。
orm

<1>算法学习是ACM比赛所要推广或者要提倡的一个方面 
记得曾经路过某人的blog,上面说他做比赛的时候遇到了一个dijkstra,他没作出来,而后评论到(大意):我才不会花时间去搞明白“这种”算法。 “这种”也许有多是指:没什么实用性,对吧,这样我就不想评论了(又是有关科学和工程的讨论)。但起码有一点须要明确的:ACM-ICPC比赛时关于计算机科学的比赛,计算机科学是算法的科学,计算机算法中dijkstra有着重要的实际和启发意义,因此比赛必定要考。
你参加这个比赛,要拿奖,就必须学习这种算法。你也许以为你智商很高,但ACM-ICPC比赛自己不是智力比赛,比赛就是要让你去学习这些东西,因此,若是你不想学的话,我以为也没有必要参加。说道这,可能偏题有点远,可是但愿以上的分析能得出这样一个基础结论:不想学好算法,那没有必要来比赛。
blog

<2>用模板是很差的 
如今不少咱们弱校的ACM-ICPC选手比较依赖模板,说实话,我也很依赖,可是我起码知道一点,这样是不对的,某种意义上说,这是你没有把算法学明白的一种表现。并且也严重影响编码速度。在我见过的huicpc035参加过的比赛中,他历来没有看过模板,所有现场敲,有一次比赛有个图强连通份量+缩点+染色+什么的题去了,我在他们机房作,我则抄模板,结果总共敲了1个半小时,而035明确算法以后,啪啦啪啦,估计30多分钟就敲完了。这里顺便八卦一下他:我和kevin之前去湖大集训队玩的时候,给他取了个外号——打字猛男(他应该还不知道)。由于他敲键盘的声音特别大特别快,呵呵。

我以为他敲代码的时间没有浪费,某牛曾说:由于每次敲都有可能有不一样的错误,因此不用模板是好习惯。我最开始学dancing link的的时候,本身敲出了代码,而后接下来的几道题部分参考了之前的代码,后来基本上是直接copy。如今,当别人问我dancing link算法或有关的题目的时候,我已是一脸茫然。

因此,用模板是很差的,有时候因为某些缘由可能你用了模板,但你起码要知道这要作是不对的,而且有机会要改正。

<3>须要深刻学习 
像 ACRush、zzy、ahyangyi...等等国家队的天才们,自己难以说咱们与他们之间有什么可比性。可是他们的学习方法应该仍是值得借鉴的,他们的学习方法固然咱们得不到言传身教,可是从他们在国家队集训的论文中和他们搞完ACM-ICPC之后的轨迹中,能够有所体现。那就是:深刻学习。

其实这点我来说可能仍是不够有力,由于我这方面也很欠缺,我尽可能说下个人想法。

首先,以为ACMer学算法不该停留在看看代码实现这个层面,在算法思想上要有清醒的认识,在正确性分析上要也应该要有较好的逻辑。由于网上的代码的实现上的一些细枝末节极可能掩盖了算法自己有的简洁性、美感和思想。于是丧失了对算法总体上的一些认识。还拿dijkstra算法打比方,有些算法不是基于 dijskstra的直接建模,而是须要你修改这个算法,这时你对算法没有真正理解的话,也就束手无策了。

我为何老说Dijkstra算法,由于确实不少人都只知道用模板,并且模板还很差,在我看到的Dijkstra实现中,只有czyuan_acm的代码写得好。不是说其余的不对,但确实是有问题,投机取巧了的。

因此,要阅读论文和书籍,尤为与英文书籍,窥到它的本质。另外一方面,只有这样,你学的的东西才能在ACM-ICPC之外,给你必定的启发——不然你会迅速忘掉它的。

据我所知,035起码阅读了几十篇集训队论文,orzorzorz,并且切掉了例题。

<4>独立思考 
这点我也很惭愧,由于我也是缺少独立思考的。不少题我不会了就去搜解题报告,因此反而个人搜资料能力变得特别强。035和许多大牛在这点上作的比我好多了,他们遇到题不会的时候,也不会很急于把题目作出来,可能每隔一段时间又拿出来想一次,总有一天想通了,以后这一类型的题目基本上也就没有什么问题了。

而我偏偏比较“虚荣”,作到的题目不会不太愿意想过久,就想尽可能快些AC,因而急于看解题报告,这样致使的一个问题就是有些重要的东西解题报告中没有提到,而我也没去想就把他们忽略了,这样,我仍是不会作。我和035讨论问题的时候,我不会通常就直接找他要代码,可是他不懂的时候,顶多问我大致的思路,而绝对不会要代码的。

在去年ACM赛区尾声的时候,我发现035作中难题的能力已经明显超过我一个档次。看他如今作的题目,已然是至关变态,几乎是都100如下人ac,这些题目我看了基本上没什么想法,更要命的时,解题报告也搜不到。035目前的状态让我想起一我的,不知道你们知道不:wangfangbob,他切bt题的能力也是使人汗颜的。

<5>作有意义的题 
1.是不要作水题,这里的水题定义为:一眼就能看出作法,并且中途的实现能够预计没有太多问题的题目。
2.是作可以强化你最近学到的东西的题目
3.你不会但你应该会的题目。
这同时也是在说,某些没太多表明性的题目能够少作,由于对比赛帮助不大。(固然我这个参加比赛的目的很功利,非功利主义者另当别论)刚才,我把我在poj上的号和他的号对比了下,他ac而我没ac的基本上是难题,我ac他没ac的通常是水题,看得我想哭,5555。

补充一点:ac的人多的并不必定表明着水题,有些几千人ac的题目,在现场赛中ac的人不多,这样的题目每每是有必定思惟难度且编码不难的好题,这种题目要认真作,某个学长说:经典的题目啊,只有那么多,作一道,就少一道。

<6>估算好某种训练所须要的时间 
我以为我学网络流就是一个例子,我在大概赛区赛以前2个月开始学习网络流,1个月前开始学习费用流,可是对于我来说,这两个月培养出来的网络流思惟仍是不够(虽然也作了很多题),特别是,这种题目每每做为中难的题目出现,不会让你随便水的,因而,北京赛区的那道网络流当时就没有想出来——功利地说,学习网络流没有获得好的效果。

因此,如今来看,当时其实我能够不搞网络流。若是要学一种比较有难度的东西,而且还必须把他搞好,应该较早地,全面地学习,必须长期的训练以培养这种思惟。打个比方,若是你微积分平时不学,仅仅考试前一周狂作题目,我以为上90分是很困难的。
固然,这要根据我的状况而定,个人理解能力应该说是中等水平,若是牛的话应该能够更快地学好。

<7>有关训练的度 
我有时候通宵刷体,这里我不知道huicpc035有没有这个习惯,不过我通宵的时候没见到他通宵。
我以为其实通宵刷体,或者太长时间地作题,仍是很差的。咱们为何会这样有热情的作题呢,由于咱们有兴趣;可是一我的的成功不只仅依赖于兴趣,还要依赖于自控。这和打游戏是一个道理,游戏太有趣以致于咱们经常通宵——ICPC题目也太有趣,因此有时候通宵。并且不少时候是,因为一道题AC不掉,因此赌气必定要搞定才睡觉,这样一不当心,就通宵了。
其实我明白,通宵不必定效果好,这仅仅说明了你兴趣很高涨而已。通宵每每会打乱你的时间安排,打乱你的生物钟,进而影响你短时间或是中期的训练计划。并且,疲惫的状态下作题,你每每只有ac题目的欲望,而彻底丧失了ac题目的灵气。因此,我建议,ACMer必定要合理安排做息,可以自控,这样不只仅对你作 ACM-ICPC有好处。
总之,有效训练是很重要,只有经过有效的训练你才能得到你参加这个比赛应得的东西。

还有就是,除了035之外,另外一个值得你们学习的就是richardxx——我也很佩服,我并不以为他是天才,我以为他以全方位的努力让他本身变得优秀,你们看他的blog能够看到他的学习历程。

最后要说下刻苦训练这一点,这个我主要想说给咱们学校的acm队员:
客观的说,咱们学校不少名校落榜生(我相比而言是水进的)。确实都蛮聪明的,但再聪明也比不上ACRush吧?人家但是SGU都切满了!ACM不是智力测试,不是你什么都不作就能够天上掉馅饼的。固然我不是说题目必定要作多少多少道,但若是你以为你能够一心二用,从几率上来说,你百分之九十地错了,我是个工科生,我相信几率而非奇迹。

我以为035这方面也是值得咱们学习的,我比较喜欢扯淡,有时候聊题目的时候也常常不当心就去扯其余话题去了,在学习的时候,035是坚定很少聊乱七八糟的东西的,除了讨论上QQ,平时据我观察都是残酷地训练。如今回想起来,我有点后悔,QQ上和网上花掉的时间用来学习新的东西,也许结果会更好。

ACM-ICPC毫不是大学生活的所有,也不是搞算法的所有,你大能够花时间去作其余研究,作项目,或者参加学生工做(我更欣赏那些对人生和职业有良好规划的ACMer);可是,若是你搞ICPC的那段时间你不是所有投入,那的在ACM-ICPC生涯中,将只有后悔。

相关文章
相关标签/搜索