layout | title | date | tags | image | |
---|---|---|---|---|---|
post |
ACM-ICPC 與我的邂逅 |
2013-02-18 |
|
轉眼間,已經參加了三屆的 ACM-ICPC。雖然每次都去被電爆,但來到這種大場合,心中總會湧起一股莫名的澎湃,總會想要變強。可惜這次還是比很爛,比去年更爛了哈哈。ACM-ICPC 這比賽就這幾年的經驗下來,其實想取得好成績的秘訣只有一個-練習題目。持續的練習,實力絕對會持續的進步,但速度不快;但不持續的練習,實力絕對會持續的退步,且速度非常快。不過,練習的題目質量一定要夠高!
近幾次比賽下來,很明顯感受到自己解題速度以大不如前,連敲鍵盤都變慢了。不光是速度,還有準確度。而準確度又分為兩種,將想法實現的準確度,以及程式碼的正確性。前者簡單說就是 bug 一堆,而後者則是發現現在往往只能打個大綱程式碼在慢慢補,補到可以正確編譯為止。導致現在出題速度也大減,昨晚與隊友們暢談至清晨五點多,也被點出了我使用過多 STL,而常常 bug 都發生在使用 STL 的部份。雖然我自己是覺得還好,但當局者迷,既然有旁觀者都點出來了,那麼或許真的有。我想原因也是自己已經太少接觸,很久沒有寫 STL 多層嵌套的程式碼,對於程式語言已不熟悉了。
接下來,要開始擔任培訓的助教,或許明年我會以 coach 的身分在踏入 ACM-ICPC 的比賽會場。不過現在的自己,實在弱的可憐,其實滿擔心自己無法勝任培訓隊助教,深怕自己誤人子弟。想想自己在就學期間,總是抱怨著誰誰誰自己都不會教個屁這種囂張跋扈之言語,近期擔任助教也開始覺得自己何嘗不是這樣?
過去成大曾經獲得大專盃第二名與 ACM-ICPC 高雄賽區第四名的佳績,那段時間帶領我們的是第一個挺身培訓 ACM-ICPC 的電子哥。如果沒有電子哥的培訓,成大不會有這麼好的成績,我們也不會獲得這樣不錯的紀錄。在看到這幾年成大的成績不斷退後,培訓選手越來越少的情況,除了感慨外也覺得對電子哥感到愧咎。覺得電子哥花出這麼多心思與時間來訓練我們,我們沒有好好將他傳承下去,實在辜負了他。在網路上看到一篇文章,講述了台灣大學這幾年的實力變化,也覺得很感慨,現實好像真的是電子哥走了,成大就不行了。因此我決定投入培訓的行列,以往因為一些私人因素,除了參加比賽外的活動我一概不接觸,但我在成大也只剩兩年了,身為電子哥帶出來的學生,如果我們沒有好好培訓新血就離開了,成大是不是就真的完了?!
在參與這比賽的過程中,我得到了些什麼:
參加比賽一定要學習非常多的演算法與資料結構,而且 ACM-ICPC 的判定是「全對」才算通過,代表著程式要能通過所有的情況才行。因此,在編寫程式時,邏輯思路一定要正確才不會有錯誤。不過,由於競賽中的題目中都有固定範圍,在面對現實生活中的問題時,其實往往會因為習慣了固定範圍而導致思考受到侷限。
Knuth 曾說過:
A person does not really understandsomething until after teaching it to acomputer.
在學校裡,往往我們學習了演算法學習了資料結構,但由於可是制度的關係,我們只懂理論,但卻實作不出來。真的要理解一個演算法或資料結構,我認為只有真的把它實作出來並應用,才能算是真的懂了。
這不知道算不算好事,因為比賽有時限的關係,往往在 implement 時,會有一些特殊的寫法,或是可讀性極差的作法。例如:位元運算、STL 多層嵌套等等。而且網路上其實非常多中國選手的程式碼可以閱讀,都可以看到許多令人難以理解的程式碼,但只要一看懂就覺得很神奇,我認為這些都令我對 C++ 有更進一步的認識,也對寫程式更有感覺。
這三年下來,透過比賽也認識了不少朋友,其實大多數也是自己裝熟來的,裝久了好像也就變成朋友了,還好這些大神不會討厭裝熟的小渣渣。這些朋友都是一年才見一次啊,而且其中多數神人,因為比賽的規則(參賽次數與年齡之限制)今年都是最後一次參賽了,以後見面的機會也更少了吧!而除了台灣選手外,也可以認識外國選手。因為 ACM-ICPC 的緣故,結交了香港與日本的選手,雖然平常也根本不會聯絡,但感覺就超酷的!去年認識京都大學的選手,他們當時的教練現在在 Google 工作,而其中一位選手在下年聊天時也提到他正在 Google 實習,明年也要進入 Google 工作了!而香港的朋友,現在才大四吧?!已經創辦了自己的公司,也太酷,不過他倒沒有在練比賽了。覺得自己實在很幸運,有機會參加這麼一場國際大賽,可以有機會認識這麼多高手,可以有機會一睹成大以外的世界,一睹台灣以外的世界。
跟 ACM-ICPC 相關的競賽不只有 ACM-ICPC 而已,另外還有 NCPC(大專盃),也有一些小型比賽,例如:南程盃、中程盃等。參加這些賽事讓我有機會到其他縣市遊玩,或是我的故鄉-高雄,甚至是其他國家。尤其是出國的收穫真的很多,可以體驗不同的生活,可以跟國外的高手們一起競爭,可以被國外的高手們慘電,感覺真的很棒!
ACM-ICPC 每次都會有選手必須穿著的衣服,另外 Google Code Jam 在進入前 1000 名,也會發送紀念 T-shirt。因為參與比賽讓我獲得了不少免費的衣服,完全都不愁沒衣服穿了!
附個兩個月前的招生投影片:
<script async class="speakerdeck-embed" data-id="e904bf505b6e013047bd1231381b2567" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>