3.2.3 ACM 竞赛从入门到入坟
作者:选择公理
利益相关:2021 杭电六队,2022 杭电一队成员
相信大家从前面的文章中已经了解 ACM 的基本情况,这里就不赘述了。
首先需要强调的是,选择 ACM 这条路非常辛苦,每天要花大量时间刷题;同时,ACM 也是残酷的,唯有实力才能保证你不被集训队淘汰。
这里就不得不提一下参加 ACM 竞赛的一般流程了:
- 大一上:参加集训队选拔,进入集训队(错过选拔的要用 Codeforces 分数来向老刘申请)。
- 大一下:主要是个人训练,经历多轮淘汰,期末会组队(三人一队)。
- 大一暑假:以组队形式参加多校等训练,这些训练将决定你在大二这个赛季能参加几次比赛。
- 大二:训练或比赛。没比赛资格没关系,你可以沉淀,大三还有机会。
- 大三同上,但是也有选择退出的。
第一阶段
打 ACM 要趁早。从上面流程图可以看出来,大一入学就应该决定好了,然后是学习,再然后参加选拔(冷知识:集训队不是想进就能进的)。
群
首先是加群。每一届老刘都会弄个杭电 ACM 新生群,没有门槛的。想要加这个群,可以问一问杭电的其他群 / 学长学姐。
群里主要关注两件事,一个是 ACM 公选课,一个是选拔。然后有问题也可以丢群里。
公选课
老刘每学期都有公选课,大一上的时候可以去旁听。公选课的内容和选拔是相关的,课讲了哪些,选拔就考哪些。所以,跟上课程进度是很有必要的。
要学什么
编程语言(C/C++)是算法的前提,而公选课是不会教你语言的,得自学。零基础的同学要注意了,千万不要跟着 C 语言的课来学,太慢了。尽量在一个礼拜内学完 C 的基础内容(指针可以跳过),然后跟上公选课。C++ 可以晚点再学。
说明一下,语言其实包含很多语法,但是 ACM 用得到的只是其中的一个子集。像 C 的指针,C++ 的模板,都是很难但是鸡肋的知识点。如果你要做工程,那这些语法都得学。
学会语言后,可以找一个算法书(算法竞赛入门经典(刘汝佳),算法赛进阶指南(李煜东)等等)系统学习各种算法。
提醒一下,这里讲到的所有东西都要上机实践,ACM 非常注重实践。你在开始学语言的时候就要多上机。
选拔
在大一上 10 月开始,每个月至少 1 场选拔赛(上机编程的模式),每场比赛都会根据参选人员的实际表现确定若干数量的同学入围集训队。
除了选拔,还有一种进队方法那就是 Codeforces。Codeforces 每个账号都会有一个分数(rating),打 Codeforces 比赛打得好就上分,反之就掉分。只要大一上你的 rating 连续三次达到 1400(具体以老刘为准),就可以向老刘申请入队。事实上,这种方法甚至到了大二都是可以的(大二你的 rating 可能要 1900),不过几乎没有人这么做,所以还是要趁早。
大一上会选拔 50-60 人,大一下会保留 20 人左右。(仅供参考)
第二阶段
恭喜你,你已经学完了基础算法,可以进入以刷题为主的学习模式了。
刷题平台(OJ)有很多,如果没有特别适合你的,那就去刷 Codeforces。因为这个平台比赛多,老刘认可。建议 Codeforces 的每场比赛都参加(如果时间不好可以第二天补上)。
说到时间,Codeforces 比赛最常见的时间是 22:35 到 00:35(Codeforces 是俄罗斯的,有时差,所以时间有点阴间)。ACMer 其实很多都是熬夜党。
打完比赛,建议钻研一下自己没做出的前一两题,写个题解。为什么要写题解呢,一个是方便以后来回顾,一个是加深印象,一个是把自己的思维用文字表达出来,这样能发现思维的漏洞(比如证明不严谨之类的)。题解写出来发不发博客就看个人喜好吧。作者以前也是坚持写博客写了很久。
为什么要打 Codeforces 比赛呢?主要原因是打比赛有计时,有压力(怕掉分的压力),能让人提升更快。不要因为怕掉分就不参加了,你要相信只要你一直打比赛,你的 rating 曲线一定是波动上升的。
另外建议大家整理一个自己的模板(算法套路),这里推荐几个资料供参考:OI Wiki,Kuangbin 模板。想要验证模板可以去 luogu,luogu 收录了很多模板题。
第三阶段
恭喜你,你应该已经度过淘汰阶段,到了组队环节了,祝愿你组队能抱到大腿。
有了队伍,可以考虑一下分工问题,包括读题、键盘手、各种算法类型等分工。这里建议对于任何一类问题(比如数据结构),队伍里要有至少两个人擅长,因为两个人讨论解决问题比一个人要快很多很多。而在比赛中期,最好的策略也是双开,即两个人研究一题,剩下一个研究另一题(不过这只是经验之谈了)。
如果你在激烈的竞争中获得参赛资格,那么你基本可以认为你有至少银牌的实力了。(拿了铜牌及以下老刘会生气的)
退役的姿势
打 ACM 很多是为了方便找工作的,但是作者这届找工作太难了😭,光凭借 ACM 奖牌是远远不够的,要拥有好多其他能力。
不管你 ACM 是否取得了成绩,建议退役后要好好做规划,多了解行情,选择好的方向进行研究。