1. 程式人生 > >世界頂級選手的刷題之道

世界頂級選手的刷題之道

dreamoon,知名中國臺灣籍ACM選手,此為他的codeforces曲線: ![](https://img2020.cnblogs.com/blog/1849509/202005/1849509-20200510200710957-1837731710.jpg) 關於中間突降的那段,還有個小故事: 當時dreamoon已經是世界上的頂級選手,甚至前一場的div1他排名第3!(當時cf的分制和現在不同,所以現在看起來只是個紅名) 由於他沒有拿到過div2的第一名,於是決定一直故意掉分使自己有資格打級別較低的div2場。 這個機會終於到來,but當dreamoon決定在這一場暴露大佬本質並拿下第一之時……他被狙了。 ![](https://img2020.cnblogs.com/blog/1849509/202005/1849509-20200510200715659-892226724.jpg) 沒錯,被一個更牛逼的神仙開個小號調戲了…… 迴歸正題來講。 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吧。 這就是我學習演算法競賽的所有方法了。