一位ACM過來人的心得

刻苦的訓練我打算最後稍微提一下。主要說後者:什麼是有效地訓練?算法

我想說下個人理解。
不少ACMer入門的時候,都被告知:要多作題,作個500多道就變牛了。其實,這既不是充分條件、也不會是必要條件。
編程

我以爲通常狀況下,對於咱們普通學校的大學生,各方面能力的差距不會太大,在這種狀況下,訓練和學習的方法尤其重要。網絡

其實,500題僅僅是一個標誌,並且僅僅表示你作ACM-ICPC有必定的時間,學習

咱們訓練的目的是什麼?我以爲有四點
一、提升編程能力
二、學習算法
,(讀書,讀論文,包括作一些題目驗證)
三、準備好面臨將到來的挑戰(熟悉題型,調整心態)
四、啓發思惟。
測試

這裏四個目的,從訓練的角度上,重要性逐次遞減;爲何呢?
由於前面的因素是後面的基礎。而是後面的目的,想達成越爲不易。我以爲前3者能保證你ac掉你能作的題,即便難題始終不會作,也能夠ac掉中等偏難的題目。
ui

而須要必定思惟難度的題,要之前三者爲基礎並且屬於訓練的後期,中期只能做爲偶爾調節。固然,我思惟也爛得要死,對這點沒什麼發言權,你們能夠鄙視我。編碼

我這裏想主要說下第2點。spa

對於算法,我發現,不少咱們這樣的弱校ACMer選手沒有側重好算法的學習。
下面要講的幾點,可能都很老套,但我想以035對比我本身的例子給你們作說明。
orm

<1>算法學習是ACM比賽所要推廣或者要提倡的一個方面 
記得曾經路過某人的blog,上面說他做比賽的時候遇到了一個dijkstra,他沒作出來,而後評論到(大意):我纔不會花時間去搞明白「這種」算法。 「這種」也許有多是指:沒什麼實用性,對吧,這樣我就不想評論了(又是有關科學和工程的討論)。但起碼有一點須要明確的:ACM-ICPC比賽時關於計算機科學的比賽,計算機科學是算法的科學,計算機算法中dijkstra有着重要的實際和啓發意義,因此比賽必定要考。
你參加這個比賽,要拿獎,就必須學習這種算法。你也許以爲你智商很高,但ACM-ICPC比賽自己不是智力比賽,比賽就是要讓你去學習這些東西,因此,若是你不想學的話,我以爲也沒有必要參加。說道這,可能偏題有點遠,可是但願以上的分析能得出這樣一個基礎結論:不想學好算法,那沒有必要來比賽。
blog

<2>用模板是很差的 
如今不少咱們弱校的ACM-ICPC選手比較依賴模板,說實話,我也很依賴,可是我起碼知道一點,這樣是不對的,某種意義上說,這是你沒有把算法學明白的一種表現。並且也嚴重影響編碼速度。在我見過的huicpc035參加過的比賽中,他歷來沒有看過模板,所有現場敲,有一次比賽有個圖強連通份量+縮點+染色+什麼的題去了,我在他們機房作,我則抄模板,結果總共敲了1個半小時,而035明確算法以後,啪啦啪啦,估計30多分鐘就敲完了。這裏順便八卦一下他:我和kevin之前去湖大集訓隊玩的時候,給他取了個外號——打字猛男(他應該還不知道)。由於他敲鍵盤的聲音特別大特別快,呵呵。

我以爲他敲代碼的時間沒有浪費,某牛曾說:由於每次敲都有可能有不一樣的錯誤,因此不用模板是好習慣。我最開始學dancing link的的時候,本身敲出了代碼,而後接下來的幾道題部分參考了之前的代碼,後來基本上是直接copy。如今,當別人問我dancing link算法或有關的題目的時候,我已是一臉茫然。

因此,用模板是很差的,有時候因爲某些緣由可能你用了模板,但你起碼要知道這要作是不對的,而且有機會要改正。

<3>須要深刻學習 
像 ACRush、zzy、ahyangyi...等等國家隊的天才們,自己難以說咱們與他們之間有什麼可比性。可是他們的學習方法應該仍是值得借鑑的,他們的學習方法固然咱們得不到言傳身教,可是從他們在國家隊集訓的論文中和他們搞完ACM-ICPC之後的軌跡中,能夠有所體現。那就是:深刻學習。

其實這點我來說可能仍是不夠有力,由於我這方面也很欠缺,我儘可能說下個人想法。

首先,以爲ACMer學算法不該停留在看看代碼實現這個層面,在算法思想上要有清醒的認識,在正確性分析上要也應該要有較好的邏輯。由於網上的代碼的實現上的一些細枝末節極可能掩蓋了算法自己有的簡潔性、美感和思想。於是喪失了對算法總體上的一些認識。還拿dijkstra算法打比方,有些算法不是基於 dijskstra的直接建模,而是須要你修改這個算法,這時你對算法沒有真正理解的話,也就束手無策了。

我爲何老說Dijkstra算法,由於確實不少人都只知道用模板,並且模板還很差,在我看到的Dijkstra實現中,只有czyuan_acm的代碼寫得好。不是說其餘的不對,但確實是有問題,投機取巧了的。

因此,要閱讀論文和書籍,尤爲與英文書籍,窺到它的本質。另外一方面,只有這樣,你學的的東西才能在ACM-ICPC之外,給你必定的啓發——不然你會迅速忘掉它的。

據我所知,035起碼閱讀了幾十篇集訓隊論文,orzorzorz,並且切掉了例題。

<4>獨立思考 
這點我也很慚愧,由於我也是缺少獨立思考的。不少題我不會了就去搜解題報告,因此反而個人搜資料能力變得特別強。035和許多大牛在這點上作的比我好多了,他們遇到題不會的時候,也不會很急於把題目作出來,可能每隔一段時間又拿出來想一次,總有一天想通了,以後這一類型的題目基本上也就沒有什麼問題了。

而我偏偏比較「虛榮」,作到的題目不會不太願意想過久,就想盡可能快些AC,因而急於看解題報告,這樣致使的一個問題就是有些重要的東西解題報告中沒有提到,而我也沒去想就把他們忽略了,這樣,我仍是不會作。我和035討論問題的時候,我不會通常就直接找他要代碼,可是他不懂的時候,頂多問我大致的思路,而絕對不會要代碼的。

在去年ACM賽區尾聲的時候,我發現035作中難題的能力已經明顯超過我一個檔次。看他如今作的題目,已然是至關變態,幾乎是都100如下人ac,這些題目我看了基本上沒什麼想法,更要命的時,解題報告也搜不到。035目前的狀態讓我想起一我的,不知道你們知道不:wangfangbob,他切bt題的能力也是使人汗顏的。

<5>作有意義的題 
1.是不要作水題,這裏的水題定義爲:一眼就能看出作法,並且中途的實現能夠預計沒有太多問題的題目。
2.是作可以強化你最近學到的東西的題目
3.你不會但你應該會的題目。
這同時也是在說,某些沒太多表明性的題目能夠少作,由於對比賽幫助不大。(固然我這個參加比賽的目的很功利,非功利主義者另當別論)剛纔,我把我在poj上的號和他的號對比了下,他ac而我沒ac的基本上是難題,我ac他沒ac的通常是水題,看得我想哭,5555。

補充一點:ac的人多的並不必定表明着水題,有些幾千人ac的題目,在現場賽中ac的人不多,這樣的題目每每是有必定思惟難度且編碼不難的好題,這種題目要認真作,某個學長說:經典的題目啊,只有那麼多,作一道,就少一道。

<6>估算好某種訓練所須要的時間 
我以爲我學網絡流就是一個例子,我在大概賽區賽以前2個月開始學習網絡流,1個月前開始學習費用流,可是對於我來說,這兩個月培養出來的網絡流思惟仍是不夠(雖然也作了很多題),特別是,這種題目每每做爲中難的題目出現,不會讓你隨便水的,因而,北京賽區的那道網絡流當時就沒有想出來——功利地說,學習網絡流沒有獲得好的效果。

因此,如今來看,當時其實我能夠不搞網絡流。若是要學一種比較有難度的東西,而且還必須把他搞好,應該較早地,全面地學習,必須長期的訓練以培養這種思惟。打個比方,若是你微積分平時不學,僅僅考試前一週狂作題目,我以爲上90分是很困難的。
固然,這要根據我的狀況而定,個人理解能力應該說是中等水平,若是牛的話應該能夠更快地學好。

<7>有關訓練的度 
我有時候通宵刷體,這裏我不知道huicpc035有沒有這個習慣,不過我通宵的時候沒見到他通宵。
我以爲其實通宵刷體,或者太長時間地作題,仍是很差的。咱們爲何會這樣有熱情的作題呢,由於咱們有興趣;可是一我的的成功不只僅依賴於興趣,還要依賴於自控。這和打遊戲是一個道理,遊戲太有趣以致於咱們經常通宵——ICPC題目也太有趣,因此有時候通宵。並且不少時候是,因爲一道題AC不掉,因此賭氣必定要搞定才睡覺,這樣一不當心,就通宵了。
其實我明白,通宵不必定效果好,這僅僅說明了你興趣很高漲而已。通宵每每會打亂你的時間安排,打亂你的生物鐘,進而影響你短時間或是中期的訓練計劃。並且,疲憊的狀態下作題,你每每只有ac題目的慾望,而徹底喪失了ac題目的靈氣。因此,我建議,ACMer必定要合理安排做息,可以自控,這樣不只僅對你作 ACM-ICPC有好處。
總之,有效訓練是很重要,只有經過有效的訓練你才能得到你參加這個比賽應得的東西。

還有就是,除了035之外,另外一個值得你們學習的就是richardxx——我也很佩服,我並不以爲他是天才,我以爲他以全方位的努力讓他本身變得優秀,你們看他的blog能夠看到他的學習歷程。

最後要說下刻苦訓練這一點,這個我主要想說給咱們學校的acm隊員:
客觀的說,咱們學校不少名校落榜生(我相比而言是水進的)。確實都蠻聰明的,但再聰明也比不上ACRush吧?人家但是SGU都切滿了!ACM不是智力測試,不是你什麼都不作就能夠天上掉餡餅的。固然我不是說題目必定要作多少多少道,但若是你以爲你能夠一心二用,從機率上來說,你百分之九十地錯了,我是個工科生,我相信機率而非奇蹟。

我以爲035這方面也是值得咱們學習的,我比較喜歡扯淡,有時候聊題目的時候也常常不當心就去扯其餘話題去了,在學習的時候,035是堅定很少聊亂七八糟的東西的,除了討論上QQ,平時據我觀察都是殘酷地訓練。如今回想起來,我有點後悔,QQ上和網上花掉的時間用來學習新的東西,也許結果會更好。

ACM-ICPC毫不是大學生活的所有,也不是搞算法的所有,你大能夠花時間去作其餘研究,作項目,或者參加學生工做(我更欣賞那些對人生和職業有良好規劃的ACMer);可是,若是你搞ICPC的那段時間你不是所有投入,那的在ACM-ICPC生涯中,將只有後悔。

相關文章
相關標籤/搜索