【ACM入门攻略】0.大一零基础,是否要参加算法竞赛
本文写给那些刚刚高考结束,并且中学阶段从未接触过OI的大一萌新。
这里解释一下为什么只给没学过OI的萌新看。对于OIer来说,数年的算法学习经历已经足够让自己了解适合自己的算法学习方法,该如何做题练习,以及自己的水平定位,自己是否还愿意继续参加竞赛。

算法竞赛是一类赛事的总称,是指在规定的时间内(一般是2~5个小时)编写代码完成指定题目,由评测机自动评测决定题目得分的比赛。比赛主要考察选手的思维能力,算法与数据结构的知识,以及场上代码实现的精确度和速度。
在算法竞赛中,最具有社会认可度的赛事是ACM/ICPC,尽管ACM已经不赞助ICPC了,但是这个称呼仍然保存了下来。因此大学的算法竞赛选手至今仍然会自称ACMer。
有关数据挖掘,深度学习等领域的比赛,虽然也是设计算法,但不属于本文的讨论范围。

在中学阶段,信息学竞赛是五大学科竞赛数一数二的存在,只不过是倒数。然而到了大学阶段,算法竞赛却一跃成为含金量最高的竞赛之一,不论是读研出国还是就业,算法竞赛的奖项都有一定的价值。在学习算法竞赛的过程中,你会认识非常多志同道合的人,而他们未来都会成为计算机行业中的佼佼者。写算法题也是绝大部分互联网企业在笔试和面试时必不可少的环节,而ACMer可以很轻松的完成它们。
不过先别急,我并不是说计算机类学生都要参加算法竞赛。在入坑之前,你需要先知道一些算法竞赛面对的困难:
1. 你的同学和你的对手
萌新的你也许并不知道,有一批被称为OIer的人,已经比你早起步了数年之久。OI的意思不是output和input,而是Olympiad in Informatics,信息学竞赛。
如果你觉得中学阶段的竞赛只是小孩子的游戏,不可能与大学的水平相提并论,那可就大错特错了。事实上,OI的水平和训练强度都非常高,除非你在一些竞赛氛围极好的学校,比如HDU(杭州电子科技大学),否则你在大学能接受到的指导很可能远远不如他们在中学甚至小学时受到的算法训练。
当然,如果你现在并没有在最顶尖的几所大学,但也是一所211以上大学,你的同学里几乎是一定存在OIer的。但是他们大概率也不会很强,这些人以NOIP提高组一等奖为主要组成部分,最高也就在NOI铜牌水平左右。然而这对萌新阶段的你仍然是降维打击,在大一的ACM校队选拔中,萌新能够战胜这些OIer的概率微乎其微,即使到了大二,仍然只有少部分人能够赶上这些OIer。
如果你进入了一所双非大学,学校太弱以至于同学里极少或者没有NOIP提高组一等奖以上的OIer,这也不是什么好事——要知道ACM是组队赛,弱校缺乏组织也缺乏好队友的前提下,很容易陷入闭门造车的困境。
2. 自学入门导致的困难
对于大部分学校来说,学校能够提供给你的讲解,每周能有一两个小时就不错了,它们大部分来自于高年级学长的分享。而剩下的时间全都要交给自己来自学。要想零基础入门ACM,每周十个小时的投入几乎是基本要求,而且投入的时间上不封顶。在占用大量时间的同时,也对自学能力提出了极大的考验。对于经过了十几年填鸭式教育的学生来说,不是每个人刚进入大学就能有较高的自学效率的。
你可能会陷入不知道该看什么资料,别人推荐的资料又看不懂,不懂的地方又不知道该问谁,做题的时候不会只能干瞪眼,最后也没什么进步的困境。后文虽然会对具体的学习方法进行一定的讨论,但是最终仍然依赖的是每个人的学习能力。
顺带一提,有很多大学要求大一不能带电脑,至少对于计算机学习来说,这绝对是荒谬的。千万不要相信不带电脑可以每天去机房训练这种鬼话。如果你的大学也有类似要求,就把和辅导员交涉当作初入大学的第一课吧。没有必要担心带了电脑就容易每天打游戏——真的会因为游戏耽误事情的人,没有电脑玩手机也能玩得飞起。
3. 比赛本身带来的困难
也许你会听说ACM的获奖率特别高,前30%就有银,据说就有不错的含金量了;前60%也能搞个铜牌,也有机会吹一波。确实如此,因为大部分人连参赛名额都搞不到。
对于低水平选手来说,比赛本身有很大的随机性,也许最终场上卡住你的题目和你学过的算法毫无关系。长时间的失败可能会磨灭你的求胜心。你或你的队友在场上可能出现心态的波动,给整个团队带来负面影响。
有些学校有不拿奖就不给报销的政策,这会给你带来更多心理上的压力,也许还有经济上的压力。

在了解了这些困难之后,如果你仍然享受挑战,享受比赛,享受烧脑的感觉,享受通过题目的快感,那么——欢迎入坑算法竞赛。
下期预告:如何学习竞赛C++