关于训练

对于除语法入门外的大多数阶段,总结为一句话:大量的去刷难度略高于自己能力的题目

语法入门

我认为语法入门阶段应该去系统地学习,也就是你可以去找一个网课,跟着这个网课系统地学习一边语法知识。

因为语法入门阶段的知识又多又杂,如果是需要什么再去学什么的话很容易漏掉知识点。

但由于语法入门阶段的知识并不算困难,所以我认为你跟着市面上任何一位比较知名的老师去学习都是没问题的,但是最好在报课之前去网上查一查这个老师/课程的风评。

刷题

切记不要听信某些平台说只看 xxx 课就可以了,所谓训练就是要大量的刷题,无论什么网站只要有适合自己的好题就要去做。

codeforces 的题目偏向于思维,atcoder 的题目偏向于典题,我个人是觉得刚入门的话只需要做到大量刷题即可,最好的话是去刷高于自己当前最大 rating + 300 难度的题目。

非常推荐使用 cftracker 和 atcoder problems 这两个东西来做题。

CFTracker-示例图

Atcoder Problems-示例图

关于做自己最高分数+300 的题目可以这样

codeforces-problems-示例图

学习算法

算法学习我其实觉得在刚接触算法竞赛的时候不需要急着学算法,这个阶段说不定会学到一大堆 useless 的算法,我觉得应该先大量刷题把算法思维训练出来,差不多 cf 1600 分的时候在学习算法效率会非常高。

还有个名言: Stop learning useless algorithms, go and solve some problems, learn how to use binary search.(停止学习用不到的算法,去刷题,学习怎么用二分)——Um_nik

这里我推荐牛客的网课,牛客的算法课程质量是很高的。另外还有代码源的课程,遗憾的是代码源的课程已经下架买不到了。

此外学习算法也不一定必须看课,看上几篇博客再刷上几道题也是完全没问题的,可以在洛谷的题单中去搜索自己学习的算法,然后去刷题。

此外刷完题单其实并不意味着完全掌握了这个算法,因为刷题单是在你知道题单的题目是要用你现在要学的算法解决的前提下进行的,而事实上很多题目难就难在你要想到要用哪个算法。

刷题是非常重要的,一定要刷题!一定要刷题!一定要刷题!

请教问题

非常推荐看这篇文章:群里提问的艺术

简单来说:

  • 要有礼貌,毕竟没有任何一个群友有免费解答的义务。

  • 描述好自己的需求,是完全不懂思路,还是不理解某个部分的推到或是其他情况,请不要甩了个题目链接和代码就不说话了。

  • 在问问题时群友可能会要看你的代码来找 bug,这个时候请不要直接把代码发到群里,首先会对群聊产生刷屏影响,其次有些大佬是用手机在帮忙找 bug 的,会非常不方便。所以正确的做法是去找云剪贴板,将代码粘贴到云剪贴板后生成链接,然后发送链接即可(可见本文章节 关键网站-洛谷-云剪贴板 部分)。

  • 并且一定要自己做过尽可能地尝试后再去请教问题,不要随便想了一下感觉不会就去问,无论是对自己的训练还是对群友的时间都是不好的影响。

推荐比赛

对于初入竞赛的选手们我推荐打以下比赛,并且赛后补题进行学习(除非 ak,否则不补题相当于白打)

  1. Codeforces div2/3/4 不定期举办,一般时间是 22:35
  2. Atcoder Beginner Contest 每周六 20:00-21:40
  3. 牛客周赛/月赛 周赛每周日 19:00-21:00;月赛一般每隔两周的周五 19:00-21:00
  4. 洛谷入门赛 每月举行一次,时间 19:00-21:00
  5. 代码源挑战赛 每周五 20:00-21:00

算法路线与算法树

以下是代码源的 dls 和 wls 整理出的算法路线与算法树,我觉得以这个为标准去学习是完全没问题的。

学习路线

算法树

学会交际

算法竞赛的圈子其实很小,很多时候都是一群相同的人在不同的群里聊天。

在算法竞赛中交际非常重要,自己写一道题可能要研究两三天(其实并不算罕见现象),而去向群友请教的话有可能一句话就能让你开悟理解这道题的思想。

也可以喊上几个人一起 vp,比自己单独 vp 会更有意思。

另外推荐给自己取一个简短的 id,也方便群友记住你。

尊重他人

尊重他人是社交的基本要求,无论身处算法竞赛内外,我们都应时刻谨记。在竞赛中,开玩笑需有度,绝不能发展为人身攻击,应保持良性竞争氛围。

在日常交流中,请注意言语,避免无心之失被误解。例如,“我真是太菜了”这类自嘲,对于非竞赛选手而言,可能被误读为“凡尔赛”,即便本意并非如此。因此,请大家在表达时多加斟酌,避免引起歧义和不必要的误会。

结语与致谢

文章的最后我想聊一聊热爱

我们偶尔以“网瘾”自嘲,但心知肚明,在这条道路上能够步履不停,终究离不开那份深刻的热爱。

是因为我们对算法竞赛的热爱,让原本平行生活的人产生了交汇,让我们在一条艰辛的道路上共同进步。赛场之上,每一位选手都是我们的竞争对手,每一位选手都全力以赴,去超越前方的身影,力求最佳表现。走出赛场,每一位选手都是我们的朋友,大家都会轻松愉快的相互调侃,赛后一起聚餐和互换吧唧。

这条道路上注定会充满坎坷,也许因平日训练成绩的不理想而滋生些许自卑,也许我们会因与更高奖项擦肩而过而感到遗憾,也许最后的结果并不尽如人意。但每当这些情绪袭来,当我们习惯性地解锁手机,打开那熟悉的群聊,我们总会看到能够解决我们的苦恼并且熟悉的答案——“加训!”

特别鸣谢四位审阅老师:Silencer76 老师Qingyu 老师Chenzhe 老师Temp 老师。感谢各位老师抽出时间提供了专业且细致的审核意见。

特别鸣谢PHarr老师,感谢 PHarr 老师为博客建立了一个 Wiki 版本,使得大家可以更方便的查阅本文内容。

衷心感谢XCPC 萌新互助进步群 2 群的群友们,在文章撰写过程中帮忙提供了非常多的 idea,并且热心地帮助我找出了许多 bug。感谢群友的鼎力支持,才让这篇文章得以不断完善和提升。

1