ACMer

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

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

       我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。

       其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,

       我们训练的目的是什么?我觉得有四点
       1、提高编程能力
       2、学习算法
,(读书,读论文,包括做一些题目验证)
       3、准备好面临将到来的挑战(熟悉题型,调整心态)
       4、启发思维。

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

        而需要一定思维难度的题,要以前三者为基础而且属于训练的后期,中期只能作为偶尔调节。当然,我思维也烂得要死,对这点没什么发言权,大家可以鄙视我。

 

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

       对于算法,我发现,很多我们这样的弱校ACMer选手没有侧重好算法的学习。
       下面要讲的几点,可能都很老套,但我想以035对比我自己的例子给大家做说明。

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

       <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生涯中,将只有后悔。


[NEU ACMer必读]一个菜鸟的ACM/ICPC回忆录

来源: 黄东旭的日志

这是一个NEU的学长的回忆录。。。很感人。。。现在的学弟学妹也许没有了当时那些艰辛,但是我希望还是有像于泽学长那种执着的精神。

 

(一)--如果爱

第一次知道ACM/ICPC(国际大学生程序设计竞赛)是在大二,有一次寒假在北图闲逛,忽然间发现了lrj的《算法艺术与信息学竞赛》这本书(后来证明这本书是ACM届的一本奇术,这种邂逅也许也是一种于ACM奇缘吧)当时还不知道什么是算法,只是看到了信息学竞赛几个字,由于我高中的时候搞过一段时间的物理竞赛,对于竞赛有着解不开的情节,觉得自己应该也会挺感兴趣,就毫不犹豫的买了这本书,怎料回家之后却看不懂几个字,甚是郁闷。

开学后我一回到学校,就无意中知道Nauhcud和egg也想搞ACM,于是我们就不停的在学校先锋BBS上面看,想找到学校里面搞ACM的学长参加训练,后来就认识了Willmate和bool,才知道Willmate居然是和我们一届的,但是人家已经参加过一次比赛了。

接下来出场的就是大牛newton。他和will一起组织了我们当时的培训,在教学馆214,每周一次。第一次去上课时候我的心情很是忐忑,当时在poj上面没做过题,什么算法啊数据结构的都还没有学过,怕自己听不懂,于是听得特别认真。我还清楚的记得第一次课上newton给我们讲的是比较容易理解的二分法。当时觉得很难,于是copy了例题的代码回去慢慢研究了一晚上才琢磨透,第一次提交代码并通过的时候,我便深深的爱上了ACM,并且下定决心要把自己的精力全部投入到这个比赛中去!

大二暑假是我全力准备ACM的时候。那时候在北大上仅仅做过50多道题目,感觉自己的功底还是不够,代码的速度慢,有的题目还是没有思路。于是我和nauhcud暑假都没有回家,留在学校每天早上8点起床到晚上熄灯一直都在做题,我们两个每天都计划今天作的题目,然后不会的互相讲解,那段时间进步很快,训练的也比较系统,我按照bbs上的POJ题目分类,每种类型的题目集中训练几天,效果很好。

开学了,为了备战新赛季的各大赛区,我觉得我们再这样下去各自为战,不利于将来组队配合和比赛,于是我和nauhcud特地找到软件学院的院长,申请了一个机房供我们组队训练。于是从开学到十一的一个月时间里面,我们就泡在科学馆301那间机房里面,做着各种各样的热身比赛。一方面配合上更默契一些, 另一方面也积累一点比赛的经验。开始的几次我们成绩还算不错,经常在比赛中能做到4-5题,后来可能是比赛迫近,压力比较大,心里总是急躁,总是犯一些莫名的错误,总是想全面的提升自己的实力,可是却适得其反(这也许就是传说中的平台期,突破了这一时期,我们可能也就是大牛了,可惜一直到最后挂掉我们都还在平台上……)眼看着原来和自己实力相差不多的队伍(比如HIT和JLU)实力一天比一天强,我们经常埋怨师兄师姐们给我们留下的东西太少(像ACM这种讲究传统的比赛是不能断档的,如果有一两年没人搞,那么前人的辉煌就不复存在了,我们学校xiaomi和nasi他们之后就断掉了,一两年之内没有高水平的队伍出现,本来很好的势头也就都没法发展下去了,到了我么这一届,只能从头再来)要是有一个师兄像其他学校那样带我们,我们何至于如此辛苦?!后来才知道,自己原来什么也没有给学弟学妹们留下。

网络预赛到了,我们表现的很不好。北京网络预赛成了网络畅通比赛,服务器被挤爆好长时间(大概一个小时)无法交题,大家都在不停地埋怨。我是个很容易受情绪和环境影响的人,这种环境下真的无法专心比赛,后来只搞出了一道题。我的队友觉得一切都over了,我却依然抱有一丝幻想,机房里面空空的大家都走了,还有几分钟的时候他们就放弃了,屋子里面黑洞洞的,只剩我坐在电脑前面不停地刷着F题和H题,刷呀刷, 刷呀刷,可是怎么刷也交不上去....当19:00到来的那一刻到来的时候,我坐在电脑前,呆呆的望着屏幕上的"Ended",心里好难受......

  后来在上海赛区网络预赛的情况稍微好了一些虽然也出现了无法交题的状况,但是上海那边反映很迅速,半小时内就做了一个应急的补救网页,每隔十秒钟手动更新一下过题数目和判题的结果。我们比的状况也稍微好了一些,但是明显没有练习时候的状态,最后我和newton的题AC了,除此之外再无斩获,开始我们觉得没有什么希望出现了,后来没想到排到了60,这便有了一个出现名额。再后来经过我们自己举行的选拔赛,我和newton以及willmate以主力出战,nauhcud作替补。正当我们踌躇满志的拿着上海赛区的邀请函去学校的教务处申请参赛经费的时候,我们却遭到了当头一棒:学校教务处新换了个领导,居然说不知道有个ACM(还说ACM是什么民间组织的比赛真是让人可发一笑)拒绝给我们经费。当时我们欲哭无泪啊,就这样眼睁睁的看着自己两年来的努力化为泡影,于是心灰意冷决定从此放弃ACM。

 

(二)--爱后余生

   就这样我们错过了06的参赛机会.我当时觉得打击很大,真的,就这样眼睁睁的看着自己两年的时光换来了一张空白的还没有填写的参赛报名表,觉得很委屈,甚至觉得自己浪费了两年时间,逃了那么多课去训练,搞砸了好多的期末考试,甚至有一学期连奖学金都没有拿到,最后什么都没有得到,我在怀疑,我的选择是否值得.因为我也可以选择平淡的生活,像好多听话的乖孩子一样,不逃课,没事拎包上上自习,做做老师留得作业,最后得个漂亮的GPA,或是出国或是保送去北大清华(当时还不知道自己的可怜GPA居然也能保送),也许...

  于是我想尝试过正常的生活,戒掉ACM/ICPC,浏览器的首页也从acm@poj改成了blank,开始忙碌于董大妈讲的数据结构和珍珍姐的编译原理,有一段时间也忙忙碌碌的,还


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值