大学ACM/ICPC总结(陈志源的日志)

大学ACM/ICPC总结

来源: 陈志源的日志

注:本文将出现在最新一期的《创新中心案例汇编上》。

 

先个人简述下: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. 算法的列表及相应的题目分类,网上

你可能感兴趣的:(大学ACM/ICPC总结(陈志源的日志))