世界頂級選手的刷題之道

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~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章