大学ACM的总结

         下面是我看到的一个神牛对ACM的总结,借鉴一下。

 

       先个人简述下:07级本科,软件学院,09-10年创新中心ACM组组长。ACM/ICPC亚洲区3银1铜,东北地区2次一等奖,辽宁省2次一等奖。3年国家奖学金,2010年9月至2011年5月在微软亚洲研究院(MSRA)实习。

以下是本人在大学期间参加ACM/ICPC的总结,以及相关的经验教训。

首先,先说说ACM对大学以及未来发展所带来的利弊。

利:

  1. 毫无疑问,你的编程能力(注意这里不是软件开发能力)会得到大幅度地提升。ACM比赛注重短时间地写出正确的代码,是完全正确的代码。在ACM比赛中,只有对的代码和错的代码(在现实生活中可不一定是这样的),没有一本正确的代码。
  2. 你的算法能力会得到很好的锻炼。在以前的教科书里,算法是计算机学科的核心。虽然现在的观念淡化了算法的重要性,更多地注重软件的架构和利益等方面,但是基本的算法学习还是必不可少的。扎实的算法和数学功底是计算机研究的必备条件,而这些正是ACM竞赛所培养的。
  3. ACM竞赛讲究三人组队配合,这点很符合现实中的团队合作,如何作为队长合理管理团队,如何作为队员提高配合效率都是ACM比赛教会你的。
  4. 由于ACM竞赛现场赛在各地举办,比赛的同时也可以领略当年的风土人情。本人自从参加ACM竞赛,从南到北走过了不少城市,东三省的主要几个城市都去过不止一遍。在比赛的同时,也结交了许多全国各地的编程爱好者,增长了见识。
  5. ACM竞赛由于其权威性,并能选拔出高质量的计算机人才,得到世界各大IT公司的支持。Google, Microsoft都曾赞助过ACM竞赛,国内百度,有道也开始大力支持。同时各大公司也推出类似ACM竞赛的选拔比赛,并给出高额的奖金吸引人才。Google Code Jam, Topcoder, Baidu Astar基本成为计算机顶尖人才进入这些公司的捷径。我这次能进入MSRA实习,也是他们看中我的算法能力和编程能力,同时也是这些能力让我很好地完成了实习工作。

弊:

  1. 正如上文所说,ACM竞赛追求完全正确的算法和代码,这与现实生活中的软件开发和计算机研究有所不同。软件开发很难做到完全没有bug,而计算机研究更是在追求不断智能的路上永无止境。同时,ACM竞赛只要求代码的正确性,没有涉及代码的风格以及相应的文档配套,这会对以后的软件开发留下不好的习惯。(当然,以上都是观念及习惯的改变,如果想改,完全是可以改好的。)
  2. ACM竞赛需要长时间的积累,要想出好成绩基本需要花费大学的大量时间,许多ACMer都是成天成天地刷题,熬夜参加练习赛。由于长时间的接触电脑,导致身体健康情况,人际交往能力等都会受到一定的影响。
  3. ACM的训练及比赛都是个脑力与体力同时承受煎熬的过程。经常一道题目就会花费你1天乃至数天的精力,一场5个小时的比赛就像一场马拉松,谁能坚持到最后,谁就是赢家。这里面的艰辛,只有正在投身其中才能体会。
  4. ACM不是人人都适合,恰恰相反,它只适合少数人。有人说它是智者的游戏,我认为是智者和勤奋人的游戏。

 

看了以上的利弊分析,如果你有种想立刻投身其中的冲动,那么先不要着急。思考一下以下问题,看你是不是真的适合ACM:

  1. 你是否喜欢数学?注意,ACM高级别比赛的较量是数学和思维的比拼,编程只是一个基本能力。
  2. 你是否喜欢思考,喜欢解决难题,喜欢被难题折磨地痛不欲生的感觉?如果你喜欢,ACM就是你的天堂,否则就是地狱。
  3. 你是否喜欢编程,你是否喜欢“破坏”键盘?ACM讲究高效率的编程,赛场上随处可见各种疯狂的“打字机”。
  4. 如果以上你都喜欢,最后问自己一个问题,你能坚持吗?每年ACM组招新都能招到超过50人,但最后剩下的只有10人左右,大部分人都是以为ACM很好玩,还能得奖就报名了,结果发现不是这么回事。ACM是一个门槛很高的比赛,不是想随便玩就能玩的。

 

最后,根据我个人的经历,谈谈ACM如何训练及比赛。

  1. 刚开始接触ACM基本就是做水题,即无算法或者简单算法的题目,主要是熟悉ACM,打好编程基础。推荐的在线网站为POJ(http://poj.org/),由于它是国内最老的OJ,蕴含着前辈的心血和智慧,如果遇到问题,比较容易找到人解决。POJ上水题很多,找200水题熟悉下即可。
  2. 不少人会热衷于水题,并且痴迷于POJ上的题数及排名,如果你只想通过ACM来提高编程能力,那么没问题,刷水题到500以上也并非难事。如果你想进一步提高自己的ACM水平,水题刷到300以上就一定要打住,开始系统地学习算法。
  3. 算法的列表及相应的题目分类,网上随处能搜到。同时,我极力推荐在学算法刷题的同时,写写相应的解题报告。解出题目是一个层次,能够写出解题报告并让别人看懂说明你对相应的算法有了更深的理解。无论是给自己看,还是贴在网上给别人看,都是值得推崇的。同时,写解题报告也可以推动ACMer之间的相互交流,共同进步。我在ACM训练期间经常在个人空间里写一些解题报告,其中有关几篇关于数据结构和数学的文章值得初学者借鉴(http://hi.baidu.com/czyuan_acm/home).
  4. 当你对大部分的算法有所了解后,就可以参加比赛了。参加比赛前的一个重要准备就是整理模板库,即对一些常用算法的代码进行整理。ACM比赛是允许带任何纸质材料,包括书。所以,整理一些基础的代码还是十分有用的。但是,不能过分依赖模板,越是高级的比赛,模板的重要性就越低。
  5. ACM比赛是个变化莫测的比赛,很多初学者都会纠结于一道题目无法自拔,直至比赛结束后悔莫及。如何调节心理,如何在比赛中指定相应的策略,如何避免非技术因素导致的失败,这些只有通过不断比赛来积累。而这些都是许多ACMer无法逾越的一道屏障,成为他们心中永远的伤痕(暗指本人>.<) 。

 

最后的最后,引用几乎每个退役的ACMer都会说的话:ACM is just a game. 如果你喜欢,就享受它,如果不喜欢,就远离它。

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页