如何去练习竞赛性质的编程?
sixwalter Lv6

Competitive Programming

如何去练习竞赛性质的编程?

意见或指导

Radewoosh’s blog

他认为你需要将生命的一部分给予CP。他所指的不是时间,而是一部分思维(a part of their minds)。在不断练习以及观察我们进步的时候,我们在其中希望变得更加优秀,并获得真正意义的快乐。这也意味着让自己思考各种问题或在现实生活的许多方面看到算法解释。

他还认为每当我们有以下想法的时候,我们都应该练习。“it will be cool to solve every problem on this website”,这种想法越多帮助越大。

如果哪方面比较薄弱,我们就应该在这方面多进行练习(see your weakness)。

他的建议是把CP放在心里,并有真实的渴望去练习。而不要勉强自己,以一种组织化的方式去完成任务。

-is-this-fft-‘s blog

作者把每天的虚拟比赛当作是例行工作并变得懒惰。只是完成它们,但总体上对更难的问题缺乏兴趣。可能外在看起来没有任何变化,但内在作者不再对学习付出认真的努力,并对问题进行更加深入的思考。

  • 有可能你欺骗自己说你花了很多时间和精力练习,但是却没有做真正有意义的练习。

作者认为动机在练习当中十分重要,它认为真正重要的动机(motivations)是,对于解决问题本身具有强烈的兴趣。有另外一些动机,如找到好工作,只能算是做CP而不做其他事的原因。

Pick a problem with difficulty rating f(your rating). Pretend to solve it for* n minutes, then read the editorial.

作者认为,”solve the problem”的意思是想出一个解法,有可能的话去实现它;而不是去实现一个解决方案。假装,可能是指我们在解决问题时只进行了几次不负责任的尝试,或者说我们并没有全身心地投入到问题里。作者给出的建议是,忘记题解,开始不带一丝一毫去看题解的想法去解决问题。停止去思考“花了多长时间再去看题解”,而是去判断“我是否应该去阅读题解”。

古德哈特定律(Goodhart’s law)

‘当一项评价指标成为目标时,他就不再是一个好的测量指标了’。我们不能单单以刷题数量作为我们的目标。若是如此,我们就会偏向于做简单的题,而达不到练习的效果。

CF使用Tips

  • problem rating是使用codeforces最好的方式,做略高于符合自己rating的题目是比较有挑战性的。

CF进阶

从新手到专家

评分1400只需要完成三件事:

  • 快速写出直接模拟
  • 快速写出暴力算法
  • 在脑中或纸上将问题分成不同的情况

练习方法

解决 AtCoder Beginner Contests 中的B、C问题(solve all problems of B and C)

  • R500 – R700 – R900 – R1400

为了方便知道哪些问题尚未解决可以使用下面的链接来查看: AtCoder Problems

  • 尝试在15分钟内思考B问题的所有可能解法(尽全力),若不行再去查看题解

  • 尝试在30分钟内思考C问题的所有可能解法(尽全力),若不行再去查看题解

  • 只解决题目不是目的,目的是锻炼解决问题的能力:利用筛选和排序,寻找最简单的代码进行学习

从专家到Top 10%

为了评分1900,我们需要知道主流的算法

  • image-20221019100638206
  • code faster:对于R1100的问题用5分钟解决,对于R1400的问题用10分钟解决

  • 这里作者推荐解决 AtCoder Beginner Contests 中的C、D问题。其中C问题在10min内解决,D问题在20min内解决。

  • 如果你觉得你在哪方面比较弱,就应该在对应方面多加练习

  • Post title:如何去练习竞赛性质的编程?
  • Post author:sixwalter
  • Create time:2023-08-05 11:14:26
  • Post link:https://coelien.github.io/2023/08/05/coding-solution/code_forces_02/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments