想给大家看看   所以就弄了原创了,造成作者困扰请联系在下。

来源: 吴垠的日志

一些题外话





首先就是我为什么要写这么一篇日志。原因非常easy,就是由于前几天有个想起步做ACM人非常诚恳的问我该怎样入门。事实上就如今而言,我并非非常想和人再去讨论这种话题,特别是当我发现我有非常多的东西要学的时候,我实在是不想花太多的时间在这种问题上。可是我当年也是纯凭热情搞ACM过来的,实在是不忍心打击一个相同有着满腔热情的起步者。所以干脆就多花点时间。总结一下我的一些观点和看法。以后再让人问起这个问题的时候,也好不用再反复什么了。





其次。我在这篇文章中并不打算探讨特别细节的问题,比方说假设某些人想从中得到诸如“该看哪本书入门比較好”或者“动态规划、搜索、图论该怎么学”之类问题的答案,恐怕要让您失望了。我认为书和方法都是因人而异,对自己最好的方法须要靠自己去摸索。抄别人是抄不来的。更何况当初我起步的时候也差点儿是一个人单干。没什么人推荐好书之类,都是搜到哪本书里有我想看的东西然后就抓过来看,感觉不行就再换一本。非常多众口相传的好书,我第一次看的时候,事实上里面绝大部分的内容我已经都学过了,所以这样的书籍对刚開始学习的人的作用。我本人并没有切身的体会,并且也没有过相关的教学经验,所以不敢任意评价。

再次。本文非常多观点只从是个人经历和想法总结出来的。我对教育这方面也并没有什么研究,所以没什么体系化。内容非常山寨,仅供參考。





最后,这可能是一篇非常低端的文章,希望大家不要抱着什么非常大的期望,免得到时失望更大。

不足之处,还望谅解。





 





为什么要做ACM?





这个题头可能有些歧义。我这里并非想要宣传ACM有多好。而是我希望每个想參加ACM的人先问一问自己这个问题:我为什么要參加ACM?我想从ACM的锻炼中得到什么?





在我看来,这个问题的最好的答案是“由于做ACM非常爽”。当你埋头苦读你千辛万苦搜集到的各种资料。最终学会了某算法并用它A了一道连XX大牛都没有做出来的题时,你认为非常爽;当你埋头苦思数日,突然灵光一现想到解法,一下AC,多日积郁一扫而空。你认为非常爽;当你看完一道题之后,行云流水般的在键盘上敲着代码,一遍通过sample并AC,你认为非常爽。即可了。





也许有人会问,搞ACM能找到好工作吗?是能够。但我认为假设你真的想找到好工作,你应该多去外面实习,多做几个项目积累经验。而不是来搞什么ACM。

搞ACM能对学术有帮助么?确实有。可是假设你真的想做学术。你应该早点进个实验室,或者争取去MSRA实习。或者自己多研究一些前沿的学术论文,而不是来搞什么ACM。搞ACM对保研加分有帮助么?是有。

可是你不认为数学建模什么的会比ACM更有帮助么?





当然我要承认的是。大多数ACMer除了爽之外,确实收获了非常多其他的东西。

但是假设你觉得除了“学算法、coding、A题的感觉非常爽”或者说“我想晋级Final”之外,更期待某些其他的结果。那说明你真正应该搞的不是ACM。假设有一天,你并没有由于搞过ACM而拿到一份非常优秀的offer,或者申请时发现你拿的那些ACM奖全然没有不论什么作用等等,你确信那时的自己仍然不会懊悔參加ACM。我觉得这才是真正适合去做ACM的心态。





 





找到“组织”





这里的所谓“组织”,是指和你水平相近(最起码讨论的问题,层次不要差太多)。而且愿意常常和你交流的人,并不一定必须是一个团体。“组织”是相当重要的,相互交流是高速进步的一个重要因素。这个不仅限于刚開始学习的人。

当年我集训队在役的那段时光就是我进步最快的时候,由于我有两个非常强的队友fishcanfly和mostleg,与他们两个的交流让我获益良多,远比之前一个人单干的提高要有效率。





就如今ACM的发展状况来看,想找到个组织应该不是非常难的事情。

能有在你身边的人一起来做是最好的,像HIT的“ACM俱乐部”就是非常不错的组织,非常多学校的ACM队也应该会有类似在集训队之外的“编外组织”一类。应该多去打听打听。

假设实在不行,网上有非常多的bbs,QQ群。甚至你在renren上多留意,都能找到非常多的ACMer,交流应该不会成为一个基本的障碍。

假设实在是找不到组织,那就仅仅能自己痛苦一点了,这点我也没有什么非常好的办法。只是这也并不代表就没有希望了,我当年起步时HIT的状况也几乎相同。我认识的非常多大牛也都是从这种环境起来的。乐观的来讲,这种艰苦的条件是非常能磨练人的,出了什么问题都必须靠自己。

对有热情有毅力的人来说,是一个挖掘自己潜力的机会,并不见得是坏事。

要有毅力





这里所说的毅力并非指熬过肉体上的痛苦。比方说那个广为流传的“弱校ACM奋斗史”中写的,在基地打地铺,每天泡面+熬夜一类。当然我对这样的精神是相当钦佩的。仅仅是这些困难事实上不算是什么大问题。由于仅仅要精神不累的话。肉体上的疲累并不像想象中的那么可怕。





我认为ACM非常耗精力倒是真的。比方说你可能越学越发现要学的东西还有非常多。似乎无穷无尽;或者你发现你周围的人都进步神速。但是你自己却还在龟速前进;又或者你在參加比赛时非常多题都不会做,看完解题报告后发现居然如此简单,学会之后以为自己能够了,但是下次再比赛又有一大堆不会的题(我07年初做TC时就是如此)。大多数人总要遇到一个长期不断被虐的过程,非常多时候精神上会非常痛苦,会冒出究竟还要不要继续做下去,做这些都是为了什么之类的问题。实际上我05, 06, 07这三年每年都遇到过这种问题,如今看来,我非常庆幸我坚持下来了。





其实,我相信凡是真正喜欢ACM的人。是不会被这样的困难击败的,仅仅是应有一些心理准备,同一时候有一些决心才好。





 





不要迷信“神书”光环





事实上这非常easy。非常多神书确实神,但是不一定适合刚開始学习的人。比方广为流传的,刘汝佳当年写的那本黑书“算法艺术与信息学竞赛”,也仅仅是针对许久之前OI的那种“信息流通性不强”的情况搞出的一个大杂烩。我当年刚開始搞ACM的时候就买了一本,结果搁了N年也没看完。事实上就今天的眼光来看,这书应该基本不符合时代了,要不然刘汝佳也不用大花心力再去编写一套新的。还有众口相传的CLRS,尽管我不是拿它来入门,但是我隐约认为。假设有个明确人在你身边指点的话,这书倒是还不错。假设是刚開始学习的人自学,不见得会有非常好的效果。

至于究竟该选择哪些资料来入门?我仅仅能说因人而异。

记得当时我大部分知识的入门方法就是在网上寻找各种资料,事实上我认为网上有非常多资料讲得非常通俗易懂,对于一个身旁无人指点的人来说,效果不见得会比那些神书要差。

当然在这样的“山寨式”的学过这些东西之后。还应该找几本好书来细致看一看。因为这时非常多基础问题不再是障碍。才干更加easy把握住这些好书中精华的部分。

多做难题





假设你去问那些牛人“这道题你是怎么想到要用XXX方法的”,我预计大部分人都说不出个所以然来。

事实上非常多情况下都是纯凭直觉考虑到的数个思维方向。这样的直觉是须要大量的练习来得到的,没有那么多“为什么能想到”,类似于Roba口中的“条件反射题”一样。所以要多做题。





只是这里的“多”不是指数量多,而是质量多。所谓的难题也并非指要做那种难到天顶的题,而是适合自己的难题。

假设一道题可以让你经过数个小时甚至一天的冥思苦想,最后最终AC,我觉得这种题才是最好的。当然这是你要有一些相关基础的前提下才干做的。不要一上来就走极端。





其实。我觉得仅仅有对思维进行这样的接近极限的运转,才干最大限度的加深对相关知识的理解能力。在众多的idea中一一排除,最后找到正确的那条路,也能让你每一个方法的本质有一些更深的理解。并且这样的方法过题,得到的成就感显然不是刷十几个水题能比得了的。

至于这种题该怎样去找,看某些有难度分级的题单是一个不错的方法。TC, CF这种题目分级相当明白的OJ也是不错的选择,或者干脆去看一道题的AC数和AC率。

这个可能须要做非常久才干把握住哪些题适合自己。可是当有了一些基础之后,至少要时刻提醒自己。多做有质量的题,少做水题。





 





不要做太多比赛





由于绝大多数的比赛都不是面向刚開始学习的人的。所以我认为刚開始学习的人做比赛有害无益。就算是做比赛,也应该明确做比赛的目的是要警告自己还相当弱,激励以后继续努力,而不是要检验这段时间的学习成果一类。





因为刚入门的人知识方面还有相当多的空白。想提高是一件非常easy的事情,有大量的资源可供使用,自己线下练习全然足够。我看不出比赛会有什么特殊的奇妙效果。在我看来,比赛主要锻炼和提高的是自己知识和技巧的运用能力。或者你能够看成是“招式”。比方我07年做了一年的TC之后总结了一下,发现我的知识水平似乎没有显著的提高,倒是思维的活跃度、临场发挥能力有了显著的提升。对实际上没有超出自己知识水平的问题,AC率显著上升。

可是想达到这个效果。首先要有足够的根底,然后才是去考虑该怎样高效的运用你的内功。

仅仅靠比赛是没办法无中生有的。并且比赛连续失利非常easy打击一个人的热情,这对刚開始学习的人来说是非常致命的。所以刚開始学习的人对一般的比赛。建议还是少碰为妙。





 





附:我心中合格的队伍应该具有的素养





假设你要问:什么样的队伍是优秀的队伍?当然,这个答案很之简单,三个全能型大神组成的队伍就够了。

比方2011年IPSC的Petr + ACRush + tourist。你认为这种队伍还须要什么别的吗?





只是这个回答显然没有意义。这是不论什么队伍所能达到的能力上界。

所以我试图从草根的角度出发。描写叙述一下我心中一个“正常”的好队伍(我默认上面的那种队伍是不正常的)应该包括什么样的素养。

当然并非指以下这几条都要满足,而是这几条是应该关注的比較重要的方面。





三人在ACM涉及到的各个大类都有非常好的基础。

或者说,假设在比赛中遇到不论什么一类问题,且难度定位为“简单”或者“中等偏低”。三人应该都能够独立解决。

我觉得作为一个优秀的队伍,三个发展全面的队员是不可缺少的。尽管不一定在各个方面都有解决难题的能力,可是基础绝对不能差。

每一个方向至少有2人能够对难题进行讨论。

假设一个方向仅仅有一个人懂的话,可能这个人会有一些盲点,假设卡题了。也没有人能够与之讨论。每一个方向有两个人深入的话,基本能够保证对绝大部分的情况都能够应付。

有一名知识面广阔的队员。这种人比較适合掌控全局,能够对绝大多数问题的难度有准确的预估。

有一名编码能力稳定的队员。

三人全都抽风的队伍波动太大,作为一个优秀的队伍,最起码要保持一定程度的稳定。至少应该有一名队员要有稳定输出的能力。

有一名可以“混”的队员。这里的混究竟是什么标准不太好解释。从境地上比較类似于那句广为流传的名言“这道题我不会做。可是AC还是没有问题的”。或者换句话说。一个队伍应该有一个人有能力在关键时刻出“奇兵”,尽管并不一定要求有非常高的成功率(否则就是神队了),可是最起码在最后关头不至于毫无翻盘之力。

想一想,我06年在役的队伍似乎在这五条上做得都还不错,唯一的缺点是三人都还缺少历练。

也不知道是不是由于我对我们队的配合相当惬意,所以影响了我对“好队伍”标准的设定。总之,我觉得上面那几条是很值得注意的几个方面。或者说在组队练习中应该注意的方向。

后话





事实上上面这些东西可能仅仅是我想说的一半左右,本来还想写一些其它的条目。仅仅是确实有些累了。要不是在renren上发过一个状态让外界给点压力。我肯定就真的要半途而废了。说究竟,我还是对科普这样的活动没什么兴趣的。





当初做ACM的理由非常easy,我非常喜欢那种经过多日苦思之后灵光一现,水到渠成的感觉。在看到那种将问题不断抽象与扩展后。一个普适的框架竟也蕴含着如此奇妙的定理。也能用那种神妙非常的方法去解决的时候。我会感到无比的兴奋。对那些陶醉于数学与算法。同一时候对国内本科教育极度不满的人来说,ACM是一个非常好的途径。让他们可以自食其力,在自己喜爱的事物上尽情发挥自己的天分。





我怀念当初做ACM的日子。怀念与队友共同奋斗的时光,是由于那时的我。就像是牛顿那句名言中在海边玩耍的孩子一样,每天都能为自己捡到美丽的贝壳而感到兴奋。

可能这也是我近几年为什么越来越不愿再去做比赛的原因。当你不再满足于ACM给你带来的欢乐时。最好还是跳出这个圈子。去外面看看。外面的世界非常精彩,ACM仅仅是一个開始,而绝不应该仅仅是终点。





我祝愿全部ACM刚開始学习的人都能享受到ACM的魅力。也希望每个刚開始学习的人能通过ACM。找到属于自己的广阔天地。

嗯。应该也没什么想要再说了。就这样了。

有关怎样入门ACM的更多相关文章

  1. 新手入门 acm 输入输出练习

    A + B Problem(1000) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  2. 【如何入门ACM】

    第一阶段:先刷水题,水题,就是几乎不牵扯算法.需要自己想方法解决.这样的题,一是锻炼逻辑和思维的严谨,二是锻炼代码能力.一般做到60-200题左右. 第二阶段:渐渐的学一些简单的算法,或者专题训练,或 ...

  3. [转载]有关如何入门ACM

    来源: 吴垠的日志 一些题外话 首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门.其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发 ...

  4. 大牛对ACM入门菜鸟的一些话

    首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门.其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发现我有很多的东西要学的时候,我实 ...

  5. 2014上半年acm总结(1)(入门+校赛)

    大一下学期才开始了acm,不得不说有一点迟,但是acm确实使我的生活充实了很多,,不至于像以前一样经常没事干=  = 上学期的颓废使我的c语言学的渣的一笔..靠考前突击才基本掌握了语法 寒假突然醒悟, ...

  6. ACM java写法入门

    打2017icpc沈阳站的时候遇到了大数的运算,发现java与c++比起来真的很赖皮,竟然还有大数运算的函数,为了以后打比赛更快的写出大数的算法并且保证不错,特意在此写一篇博客, 记录java的大数运 ...

  7. ACM入门步骤(一)

    一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可 ...

  8. ACM基础算法入门及题目列表

    对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访 ...

  9. ACM入门指南

    本文已经转移到了:http://harryguo.me/2015/11/03/ACM-%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/ 什么是ACM? 想必打开这篇博客的人已 ...

随机推荐

  1. HTML学习笔记 div布局及table布局案例 第三节 (原创)参考使用表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【5】namenode启动过程

    1.格式化空间(第一次启动的操作): 命令:bin/hadoop -format //用于格式化HDFS,如果不是首次格式化,需要删除下面配置的tmp目录后再进行core-site.xml的配置: / ...

  3. MySQL解压版配置步骤详细教程

    解压mysql到D盘根目录 在解压路径下复制my-default.ini,修改名称为my.ini 在my.ini内容如下 [client]default-character-set=utf8 [mys ...

  4. python 保存命令执行结果

    保存命令执行的结果需哟使用os.popen("系统命令").read(),然后使用变量赋值输出即可 >>> result = os.popen("df ...

  5. 实现基于tomcat集群会话保持

    1.实验环境 我们需要准备两台虚拟机,把这两台虚拟机组成集群,实现会话保持. 2.配置server1 2.1 修改nginx配置文件 [root@server1 ~]# vim /etc/nginx/ ...

  6. MSSQL-并发控制-2-Isolation

              如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持!   MySQL通过MVCC和锁来实现并发控制,在4 ...

  7. [动态规划]P1220 关路灯

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  8. 裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  9. 项目实战7—Mysql实现企业级数据库主从复制架构实战

    Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公 ...

  10. CCF-201409-2-画图

    问题描述 试题编号: 201409-2 试题名称: 画图 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩 ...