谈ACM生涯总结的经验

自从我在博客上留下了qq之后,不时会有热心网友来询问我关于算法竞赛的经验。由于每次我都会想到哪儿说哪儿,导致遗漏一些比较关键的信息,所以我试图总结一些问的频率比较多的问题,

同时我也希望在我还尚未远离算法竞赛这个圈子的时候,对我两年来短暂的职业生涯做一些总结。

首先,我必须声明,以下的仅能作为一位即将退役选手个人总结的经验,如果有不认同的地方,欢迎通过qq或者评论区交流。

其次,这不是退役记,退役记很大一部分是写给自己看的,而这篇文章我会尽量保证客观。并且,我毕竟还没有事实意义上的退役——下个月还有一场EC-final.

关于我的背景:0基础,大一接触ACM,双非 + 弱校,往届学长没留下什么传承,算法竞赛全靠自学,19赛季训练/获奖情况 看这里,以下只能作为个人提供的参考,不是什么成功者/过来人的指导

1.参加算法竞赛的初衷最好可以是热爱

  将"热爱"放在第一点说,是因为我觉得他足够重要——如果只是因为单纯的喜欢做算法竞赛的题目,那剩下的问题只是足够的训练时间和志同道合的队友了。

  但事实上,大多数的竞赛选手往往抱着功利的心态参加算法竞赛——希望拿一些牌给自己的简历上增加亮点。并不是说抱着这种心态的人一定打不好比赛,相反,如果自制力够强的话,即使是抱着追求功利心态的想法也可以打到很不错的成绩。

  事实上,像我一样功利 + 热爱也未尝不可,一方面有来自拿奖的压力,一方面也不会把刷题看作是一件需要很大努力的事情。

2.我始终认为ACM作为一个团队比赛,最最重要的是个人能力,其次是队友。

  首先个人能力是毋庸置疑的,否则为什么三个毫无配合的中学生可以虐区域赛的场。

  其次,我说的来自队友的重要性,并不单指比赛的时候需要发挥出 1 + 1 + 1 > 3 的效果(当然这是一个队伍起码需要做到的)

  更重要的是,来自队友的督促是可以逼迫自己加紧训练的,如果队内存在1-2个从来不参加训练的摸鱼选手,那对剩下的人训练积极性是一个非常大的打击。

  如果有志同道合的队友每天跟着一起保证日常训练,难题交流的话,不仅能够有效提高水平,也会提升参赛的兴趣。

3.怎么选队友?

  ·首先,队友水平不可以比你菜太多,因为这往往意味着不够努力或是智商差距太大。当然,如果是因为训练时间上的差距还是可以接受的(例如有一些基础的OI选手和0基础选手或是大三和大二选手组队)

  ·其次,别找混子队友,如果只能匹配到混子队友的话,专注于把你自己的实力提升上去匹配更强的队友组队。如果恰好整个学校的acm选手除了你都是混子的话,我觉得如果不是天赋异禀或非常热爱,可以另谋出路。

  ·队伍中一定要有个能起带头作用的队长,需要组织训练和做题,调动队内氛围,及时把摸鱼队友换掉等等,当然,不是说队长刚组队就需要有这些能力,但是需要他在之后的过程中学着去干这些事情,这些"脏活累活",总是需要有一个人站出来做的。

  ·总之,选队友的指标没有那么复杂,在可供范围内选择 够强 + 够努力 的队友,适用于多数情况。

4.怎么平衡日常学业?

  首先,但凡不是高中阶段就具备强大实力,进入大学以后可以随便获得奖牌的选手,一定会因为算法学习和日常训练消耗大量的时间,因此不可能不影响课内学习

  Q:那我怎么听闻jls,clj等人一边参加算法竞赛一边绩点无敌呢?A;他们如果不参加算法竞赛专注于绩点,是可以拿到更无敌的绩点的,只是这没必要。

  所以,如果真的热爱算法竞赛,是需要有牺牲一些绩点或者上课时间的觉悟的,这也是我为什么之前强调队友的重要性——大家一起逃课训练才带劲嘛,一个人为了队伍成绩逃课,另一个人为了个人成绩上课,影响逃课人心态是必然的。

  由于我们队的特殊性——大二的时候队友在实习,大三的时候队友在考研。所以我们队很难做到我希望的那样一起逃课训练,这也直接导致了我决定分出一部分的时间管一下绩点。所以我虽然两年的成绩是专业第一/二,但我清楚的知道我并不是两头兼顾,而是如果我不分出管绩点的时间一心训练的话,我们一定可以取得好得多的成绩的。

  所以,如果能找到愿意跟你一起逃课训练的队友,我还是非常建议放弃一部分绩点(甚至是大部分)去训练的

5.算法太难了?我连最简单的DP/01背包都学不明白?

  对于我们普通人来说,这几乎是必然遇到的问题了。但他其实并不如你想象的难,万事开头难在这里形容的恰到好处。同时,很多专题往往开始是一些比较简单的模板题,稍微做几题就会上升到铜牌/银牌题的水平了。对于一个刚入门的初学者来说,一下子遇到这些充斥着思维的题实在是太难了。我当初也是靠对着题解一行一行敲代码来的(尽管这没什么用),DP的状态转移公式怎么看都看不明白——但是总有一天,你在过了一段时间再回过头来看它的时候,会觉得恍然大悟,会突然明白DP原来是这么一回事情。

6.关于学习的路线,学习的方向?

  这个在这里就不具体说明了,在算法竞赛影响力逐渐扩大的今天,这些东西百度上搜一搜就能搜到了。洛谷,vjudge上也有很多的推荐。

  只是可以说明:在一开始,数论(扩展欧几里得定理等)/图论(最短路)/数据结构(线段树)/其他(DP,贪心)等等的算法几乎是没有联系的,并没有严格的学习拓扑序,如果你学不懂DP,你或许可以尝试一下学学最短路或是线段树,这都没有问题,毕竟我是在打了一年半之后才正式开始接触数论。为什么说是一开始?因为到了后面,就会把这些知识相结合,出现像线段树优化dp的题目了,这时候就要求你两者都会。

 

7.和同级/学弟 的水平相差太多,感觉OI选手天下第一?
  迷信OI选手不可取。如果不去追求顶尖的水平(打入world final 或是 排名top5)的话,大一开始0基础完全是可以做到的,更何况ACM几乎是一个一个队花下多少时间,用了多少努力,配上成员相应的智商,就可以收获相应奖牌的比赛。没必要和特定的人/群体去比,如果参加比赛没有拿到银/金,大多数情况下只是因为你的努力不够到达这个层次,而不是因为你是0基础选手。

  远有kuangbin大三开始problemA + B,研一打入wf,近有我队友机械专业大三开始接触ACM,同时考研,大四能拿金牌题的一血。

  弯道超车的事情在圈子里是十分常见的事情,退一万步说,寻常OI选手打到大三总共五年,0基础选手只要愿意打到研一也是五年,如果愿意,五年时间几乎足够任何选手冲击world final了

8.推荐书籍?

  首先我是不建议仅通过看书学算法,对着一本书的专题楞做的。我个人还是建议通过查博客/看书/看题结合起来学,单看书容易睡着,也容易劝退

  最经典的刘汝佳的白书/紫书,但是我个人是不建议不是天赋异禀的初学者对着他刷的,里面很多题还是太劝退了,我到了快退役也没把它看过多少

  李煜东的算法竞赛进阶指南[蓝书],这本我刷过几个章节,写的挺不错的,建议对着刷的同时找同类型的题做,每个专题题量还是太少

  挑战程序设计竞赛,这本书挺适合初学者的,没有上面两本这么难,看看也挺快,可以看一看

  事实上网络上资料这么多,并不是非要买几本书刷的

如果还有什么其他的问题或是有不同的意见,欢迎在评论区或者加qq沟通

原文地址:https://www.cnblogs.com/Hugh-Locke/p/11954138.html