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

来源: 吴垠的日志

一些题外话





首先就是我为什么要写这么一篇日志。原因非常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. Cisco VPN Client Win10无法使用的解决办法

    http://files.cnblogs.com/files/Flyear/VPN_Win10_ByDuke.zip 1. 关闭系统所有窗口,控制面板一定要关闭. 2. 运行winfix.exe, 按 ...

  2. Flex布局(引用阮一峰大神)

    Flex 布局教程:语法篇 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html Flex 布局教程:实例篇 http://www.ruan ...

  3. C++雾中风景2:struct还是class?

    之前因为都在忙着毕业的开题答辩与投稿论文的事宜,一直没有时间更新这个系列的文章.师弟看了上一篇雾中风景的文章,希望我继续把这个系列的文章写下去.坦白说,C++的特性很多,这也不是教学指南的文章,我会选 ...

  4. 【深度学习笔记】(一)TensorFlow安装及环境搭建

    在学习了一段时间台大李宏毅关于deep learning的课程,以及一些其他机器学习的书之后,终于打算开始动手进行一些实践了. 感觉保完研之后散养状态下,学习效率太低了,于是便想白天学习,晚上对白天学 ...

  5. word的标题行前面数字变成黑框 解决方案

    如图 图1如下 图2如下 图3如下 如下解决 1. Put your cursor on the heading just right of the black box.将光标定位到标题中,紧邻黑框的 ...

  6. C# 关闭窗体立即停止进程

    C#在关闭窗体的时候,有时线程还在后台执行,没有及时退出. 处理方案: 为Form添加FormClosing事件,加入以下语句,在退出时,杀死本进程. System.Diagnostics.Proce ...

  7. 掌握numpy(一)

    NumPy是一款用于科学计算的python包,强大之处在于矩阵的运算以及包含丰富的线性代数运算的支持.本文将对numpy一些常用的用法进行讲解,一来是对自己的知识进行梳理,二来作为一份备忘录供以后查阅 ...

  8. Python之random

    random 伪随机数生成模块.如果不提供seed,默认使用系统时间. 使用相同seed,可获得相同的随机数序列,常用于测试. >>> from random import * &g ...

  9. Heap Sorting 总结 (C++)

    各位读者,大家好. 因为算法和数据结构相关的知识都是在国外学的,所以有些词汇翻译的可能不准确,然后一些源代码的注释可能是英文的,如有给大家带来什么不方便,请见谅.今天我想写一下Heap相关的知识,从基 ...

  10. selenium 执行js,实现滚动条

    今天在写脚本的时候,学习了执行js,实现滚动条,对于scrollTop=10000中这个10000是怎么来的,还不是很了解,先将方法记录一下, 1.滚动条回到顶部: js_up="docum ...