世界顶级选手的刷题之道

dreamoon,知名中国台湾籍ACM选手,此为他的codeforces曲线:

关于中间突降的那段,还有个小故事:

当时dreamoon已经是世界上的顶级选手,甚至前一场的div1他排名第3!(当时cf的分制和现在不同,所以现在看起来只是个红名)

由于他没有拿到过div2的第一名,于是决定一直故意掉分使自己有资格打级别较低的div2场。

这个机会终于到来,but当dreamoon决定在这一场暴露大佬本质并拿下第一之时……他被狙了。

没错,被一个更牛逼的神仙开个小号调戏了……

回归正题来讲。

dreamoon作为一个世界顶级选手,罕见地给全世界众萌新发放了福利!本期为他在codeforces上的blog:If you ask me how to improve your algorithm competition skill, I will give you the link of this blog.(如果你问我如何提高算法竞赛水平,我将给你这篇博客的链接),原文链接为:http://codeforces.com/blog/entry/16599

以下为AlphaWA的翻译,如有不准确之处,见谅;另,博客下的讨论请读者移步原文链接查看,此处就不做提供了。

正文:

最近一年有许多人在发消息问我同样的问题,所以我决定创建这篇博客。

丑话说在前头,读完这篇博客你可能会感到失望,因为我并不知道什么特殊的捷径。其实我的学习方式浪费了我许多许多时间。

以下是你应该已经知道的两个基本点:

1.练习、练习、不断地练习!思考并解决题目花费了我许多时间,我觉得平均一天我要花5个小时在这上面。

2.与强者结交。我认识很多高水平选手,比如: arosusti, kelvin, peter5021(0O0o00OO0Oo0o0Oo), seanwu, Shik, takaramono, tmt514, ...如果我遇到那种几个星期都想不出来的题,我基本上都能从朋友们那里得到解答。

然后我说一下我自己怎么训练的。

我刷题的时候可能有两种刷题顺序:

1.从解决人数最多的题目开始;

2.做题号相连的题目并尝试全部解决他们。

我不知道哪种更好一点,但我经常改变策略。然后当我觉得这个OJ已经没什么我能解决的题目以后,我会换个OJ继续这么做。

实际上我觉得刷题顺序对我来说并不是很重要。当我要阅读并解决某OJ上90%的题目时,你觉得顺序还重要吗?我真不知道哪种顺序是最好的,所以我把大多数题都做了。

列几个我用的OJ吧(一些中国台湾的OJ不对外开放就不列了啊):

1.Codeforces。我认为cf是现在最好的OJ。好用,并且大部分题目都有教程。

2.Topcoder。tc上有很多好题。甚至有时我觉得某些250分的题都很巧妙。这上的大多数题也有教程。

3.SGU。我觉得sgu是最难的OJ了。上面很多题都要用到不常见的技巧。

4.Timus。这个OJ上有很多较难的比赛,我认为对团队训练有益。

5.ProjectEuler。这上有很多好的数学题。而且你解题后也可以在论坛上看看别人是怎么解决这个问题的。

我认为平时练习和正式比赛是两种完全不同的感觉。所以有时我会在OJ上随机选一些题目形成一个题集然后设定时间限制,来训练我自己。但是现在Codeforces已经有了虚拟比赛的功能,所以这件事我们可以在cf上更简单地完成。

我不按专题刷题。正相反,我是在遇到一道不会的题目时再去学这个题目相关的专题。我会问朋友们这个题跟哪些专题相关,然后去谷歌一下。(译者注:一般后期都是这样刷的,显然你前期交不到大佬朋友……所以大家适当汲取,切忌邯郸学步)

很多时候即使我能解决这道题我也会阅读一下别人的AC代码。有时我们会发现一个完全不同的解决方案,可能是时间复杂度更低,也可能是代码更短。

我也没什么特殊的网站和学习资料了,就是遇到了就google吧。

这就是我学习算法竞赛的所有方法了。

END~

posted @ 2020-05-10 20:07  RioTian  阅读(870)  评论(1编辑  收藏  举报