一位ACM大牛的心得

今早又沒能早起,唉,今早看了高斯消元,雖然方法能懂,但是代碼是最煩,而且有些地方還不懂,還要啃。。。。看了大牛的經歷和博客,真是自愧不如,比你牛的人比你還要更加努力,你還有什麼理由鬆懈!


-------------------------------------------------------------------------------------------------------


本來以爲HNU的huicpc035和我一樣退役了,後來聽說他組成了新的footman隊,於是又關注了下他。

035體現了兩個我覺得非常重要的品質:
1、刻苦的訓練
2、有效的訓練

(本文將主要討論個人訓練,不討論團隊合作)
而這些品質對於我們弱校ACMer選手水平的提高我覺得很重要。
刻苦的訓練我打算最後稍微提一下。主要說後者:什麼是有效地訓練?

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

我覺得一般情況下,對於我們普通學校的大學生,各方面能力的差距不會太大,在這種情況下,訓練和學習的方法尤爲重要。

其實,500題僅僅是一個標誌,而且僅僅表示你做ACM-ICPC有一定的時間,

我們訓練的目的是什麼?我覺得有四點
1、提高編程能力
2、學習算法,(讀書,讀論文,包括做一些題目驗證)
3、準備好面臨將到來的挑戰(熟悉題型,調整心態)
4、啓發思維。

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

而需要一定思維難度的題,要以前三者爲基礎而且屬於訓練的後期,中期只能作爲偶爾調節。當然,我思維也爛得要死,對這點沒什麼發言權,大家可以鄙視我。

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

對於算法,我發現,很多我們這樣的弱校ACMer選手沒有側重好算法的學習。
下面要講的幾點,可能都很老套,但我想以035對比我自己的例子給大家做說明。

<1>算法學習是ACM比賽所要推廣或者要提倡的一個方面
記得曾經路過某人的blog,上面說他作比賽的時候遇到了一個dijkstra,他沒做出來,然後評論到(大意):我纔不會花時間去搞明白“這種”算法。

“這種”也許有可能是指:沒什麼實用性,對吧,這樣我就不想評論了(又是有關科學和工程的討論)。

但起碼有一點需要明確的:ACM-ICPC比賽時關於計算機科學的比賽,計算機科學是算法的科學,計算機算法中dijkstra有着重要的實際和啓發意義,所以比賽一定要考。
你參加這個比賽,要拿獎,就必須學習這種算法。你也許覺得你智商很高,但ACM-ICPC比賽本身不是智力比賽,比賽就是要讓你去學習這些東西,所以,如果你不想學的話,我覺得也沒有必要參加。

說道這,可能偏題有點遠,但是希望以上的分析能得出這樣一個基礎結論:不想學好算法,那沒有必要來比賽。

<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生涯中,將只有後悔。

前幾一段時間寧波理工大學舉行了邀請賽,huicpc035和他的footman拿到的金獎,在這裏先祝賀他,也祝福他今年有更大的突破。

然後,不管以後035是否拿到了更好的成績,我覺得,對於我們來說,都應該像他學習,做ACM題當如次,做ACMer當如此。

 

 

附帶另一篇日誌.

          

 

                               

生命中的最後一天
2011-04-15 22:47

 

前些日子驚聞dsh的噩耗,是在網友的BLOG上看到的。當時我就笑了,怎麼可能呢,愚人節還沒過完麼。不過仔細想想貌似有個把月沒聯繫了, CALL之,但電話那頭已經關機了。這時我就笑不出來了。後來從他同學那裏得到消息,確實是幾個月前查出肝癌晚期,幾天前走了。還是不敢相信,精力如此旺盛的人,居然說走就走了。天妒奇才,尚未揚名立萬而先逝,甚至連一篇訃告都沒有。

 

       dsh生長於單親家庭,母親做項目,經常應酬,也許是這樣塑造了他喜歡寧靜、獨處的性格。不得不承認,他是一個天才,真正的天才。初中就在理科方面顯出了過人的天份。升入高中後,由於不喜歡教條的科目,他幾乎沒上過課。直到高考時他纔有點“後悔”,但擁有過人天份的他依然不費吹灰之力就考上了某重點一本大學。

 

我們往往被理想的世界欺騙,直到親自去做的時候才理解現實。

 

    上了幾年大學才明白爲什麼要考北大清華,可即使你在北大清華你也會這麼認爲:資源總是太少、視野還是太窄、時間永遠不夠。因爲你本身就是個跟時間賽跑的人。

 

    上了大學後的他依然故我。每天研究最艱深的算法題,每個stats上都能看到dsh的大號小號。軟件學院的他沒有在一開始就得到教練的親睞。甚至軟件學院的老師把他從寢室拉出來告訴他,做軟件靠的是拉項目和各種應酬。他不喜歡每天上課還要刷指紋的禁錮,看自己喜歡的論文,啃那些別人永遠看不懂的書。

 

你可以控制一個人的行爲,但永遠不能控制一個人的思想。

 

    母親來看你,給你帶了很多零食,可你狠心的將它們全都扔了下去;親人喊你喫飯,你卻依然待在電腦前寫程序;妹妹跟你同校,但你卻不知道小盆友們需要你的照顧。你像自私的葛朗臺吝嗇你的每一分情感,像一個極端自私的人。你說你要去美國,你說你要像先賢一樣一輩子單身…

 

    還記得那時一起刷題,一起討論,一起看《金田一少年事件簿》《最後的武士》,彷彿就是昨天。那年暑假,我們一起coding,你總是能想到別人想不到的算法,甚至連命題人都從來沒有想到(比如北京賽區的那題destory bus station。你常常跟我提起年少時的經歷使你討厭數學,現在後悔當時沒有好好學。後來有天你很激動地告訴我你做出了calculate trees那題我就知道你已經突破了內心的魔障。還記得那天夜裏大家討論各自的追求,你說了一句讓我們震驚的話。是的,我從來沒想過一個從來沒有失敗過的人是什麼樣的。這一刻我才真正認識到一個追求永恆不敗的境界的人。

 

    你不是爲獎牌而ACM。現在許多ACMer認爲有了獎牌就等於有了好工作,或者保研的資本。你參加比賽從來都是以切掉最難的別人都做不出來的那道題爲目標,因此你也丟了奪金的機會。大家做ACM的初衷是什麼?對菜鳥來說是學習一些算法,對牛兒來說是領悟算法背後的哲學思想,對大神來說是去賽場show一下。對自己來說,學到東西、玩得快樂纔是最重要的。在我看來,你彷彿天生就是爲了解決類似於NP!=P這樣終極問題的人。

 

    幾個月前,我們聊了聊近況,你說你在啃傅立葉,你說你有看不完的論文,你還跟我說了許多出國留學的好處。你即將踏上你的留學之旅—紐約大學。紐約,多麼美麗的城市,那裏是全世界最繁華的城市之一、那裏有華爾街、那裏有全世界的智者賢才、那裏有自由女神。據說你就是那時候查出的肝癌晚期,但你依然強勢。你把QQ簽名改成了“申請高峯期,請理解下”,我知道你又埋書堆了,就沒敢打擾。不久前,你又在後面加了一句“看樣子必須說再見了,我會想你們的”。我還以爲你啓程去美國了,卻沒想到這竟是最後的訣別!

 

一個人只有當他獲得應有的社會地位時,他的才能發揮出來。

 

    你說我貪玩,我說你太偏執。現在我終於理解了你的偏執。各種不幸的經歷讓你討厭命運之神。你知道你還在跟死神賽跑,但是你有你的夢想,你知道片刻都不能耽誤。所以你很果斷地行動,即使是高燒40度依然在月賽衝進前十。你的靈魂或許已經去大洋彼岸繼續追逐你的大師之路了吧。

 

只有勇於面對死亡仍然不放棄夢想的人才是真正的武士,這就是武士道的精神。

 

    斯人去矣,羣裏常有隻言片語的惋惜,大多數人只知道huicpc035。但他們不知道,你不喜歡這個名字,所以朋友們都叫你dsh,因爲這是你的本名,是真正的自己。我們不應該只在記憶的碎片中懷念。故以此文:紀念那個逝去的友誼,紀念一個永恆的精神,紀念一個不滅的夢想,紀念一個勇於和命運抗爭的鬥士—杜思翰。

 

*把每一天都當成生命中的最後一天,你就會輕鬆自在。

*每天早上洗臉時,請在鏡子前問自己:如果今天是此生最後一日,我今天要幹些什麼?

*永遠不要放棄夢想,即使是生命中的最後一秒。

*珍惜生命,珍惜現在,因爲它可以很短暫,它離開無預兆。

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