【ACM入門攻略】0.大一零基礎(chǔ),是否要參加算法競賽
本文寫給那些剛剛高考結(jié)束,并且中學(xué)階段從未接觸過OI的大一萌新。
這里解釋一下為什么只給沒學(xué)過OI的萌新看。對于OIer來說,數(shù)年的算法學(xué)習(xí)經(jīng)歷已經(jīng)足夠讓自己了解適合自己的算法學(xué)習(xí)方法,該如何做題練習(xí),以及自己的水平定位,自己是否還愿意繼續(xù)參加競賽。

算法競賽是一類賽事的總稱,是指在規(guī)定的時間內(nèi)(一般是2~5個小時)編寫代碼完成指定題目,由評測機(jī)自動評測決定題目得分的比賽。比賽主要考察選手的思維能力,算法與數(shù)據(jù)結(jié)構(gòu)的知識,以及場上代碼實(shí)現(xiàn)的精確度和速度。
在算法競賽中,最具有社會認(rèn)可度的賽事是ACM/ICPC,盡管ACM已經(jīng)不贊助ICPC了,但是這個稱呼仍然保存了下來。因此大學(xué)的算法競賽選手至今仍然會自稱ACMer。
有關(guān)數(shù)據(jù)挖掘,深度學(xué)習(xí)等領(lǐng)域的比賽,雖然也是設(shè)計算法,但不屬于本文的討論范圍。

在中學(xué)階段,信息學(xué)競賽是五大學(xué)科競賽數(shù)一數(shù)二的存在,只不過是倒數(shù)。然而到了大學(xué)階段,算法競賽卻一躍成為含金量最高的競賽之一,不論是讀研出國還是就業(yè),算法競賽的獎項都有一定的價值。在學(xué)習(xí)算法競賽的過程中,你會認(rèn)識非常多志同道合的人,而他們未來都會成為計算機(jī)行業(yè)中的佼佼者。寫算法題也是絕大部分互聯(lián)網(wǎng)企業(yè)在筆試和面試時必不可少的環(huán)節(jié),而ACMer可以很輕松的完成它們。
不過先別急,我并不是說計算機(jī)類學(xué)生都要參加算法競賽。在入坑之前,你需要先知道一些算法競賽面對的困難:
1. 你的同學(xué)和你的對手
萌新的你也許并不知道,有一批被稱為OIer的人,已經(jīng)比你早起步了數(shù)年之久。OI的意思不是output和input,而是Olympiad in Informatics,信息學(xué)競賽。
如果你覺得中學(xué)階段的競賽只是小孩子的游戲,不可能與大學(xué)的水平相提并論,那可就大錯特錯了。事實(shí)上,OI的水平和訓(xùn)練強(qiáng)度都非常高,除非你在一些競賽氛圍極好的學(xué)校,比如HDU(杭州電子科技大學(xué)),否則你在大學(xué)能接受到的指導(dǎo)很可能遠(yuǎn)遠(yuǎn)不如他們在中學(xué)甚至小學(xué)時受到的算法訓(xùn)練。
當(dāng)然,如果你現(xiàn)在并沒有在最頂尖的幾所大學(xué),但也是一所211以上大學(xué),你的同學(xué)里幾乎是一定存在OIer的。但是他們大概率也不會很強(qiáng),這些人以NOIP提高組一等獎為主要組成部分,最高也就在NOI銅牌水平左右。然而這對萌新階段的你仍然是降維打擊,在大一的ACM校隊選拔中,萌新能夠戰(zhàn)勝這些OIer的概率微乎其微,即使到了大二,仍然只有少部分人能夠趕上這些OIer。
如果你進(jìn)入了一所雙非大學(xué),學(xué)校太弱以至于同學(xué)里極少或者沒有NOIP提高組一等獎以上的OIer,這也不是什么好事——要知道ACM是組隊賽,弱校缺乏組織也缺乏好隊友的前提下,很容易陷入閉門造車的困境。
2. 自學(xué)入門導(dǎo)致的困難
對于大部分學(xué)校來說,學(xué)校能夠提供給你的講解,每周能有一兩個小時就不錯了,它們大部分來自于高年級學(xué)長的分享。而剩下的時間全都要交給自己來自學(xué)。要想零基礎(chǔ)入門ACM,每周十個小時的投入幾乎是基本要求,而且投入的時間上不封頂。在占用大量時間的同時,也對自學(xué)能力提出了極大的考驗。對于經(jīng)過了十幾年填鴨式教育的學(xué)生來說,不是每個人剛進(jìn)入大學(xué)就能有較高的自學(xué)效率的。
你可能會陷入不知道該看什么資料,別人推薦的資料又看不懂,不懂的地方又不知道該問誰,做題的時候不會只能干瞪眼,最后也沒什么進(jìn)步的困境。后文雖然會對具體的學(xué)習(xí)方法進(jìn)行一定的討論,但是最終仍然依賴的是每個人的學(xué)習(xí)能力。
順帶一提,有很多大學(xué)要求大一不能帶電腦,至少對于計算機(jī)學(xué)習(xí)來說,這絕對是荒謬的。千萬不要相信不帶電腦可以每天去機(jī)房訓(xùn)練這種鬼話。如果你的大學(xué)也有類似要求,就把和輔導(dǎo)員交涉當(dāng)作初入大學(xué)的第一課吧。沒有必要擔(dān)心帶了電腦就容易每天打游戲——真的會因為游戲耽誤事情的人,沒有電腦玩手機(jī)也能玩得飛起。
3. 比賽本身帶來的困難
也許你會聽說ACM的獲獎率特別高,前30%就有銀,據(jù)說就有不錯的含金量了;前60%也能搞個銅牌,也有機(jī)會吹一波。確實(shí)如此,因為大部分人連參賽名額都搞不到。
對于低水平選手來說,比賽本身有很大的隨機(jī)性,也許最終場上卡住你的題目和你學(xué)過的算法毫無關(guān)系。長時間的失敗可能會磨滅你的求勝心。你或你的隊友在場上可能出現(xiàn)心態(tài)的波動,給整個團(tuán)隊帶來負(fù)面影響。
有些學(xué)校有不拿獎就不給報銷的政策,這會給你帶來更多心理上的壓力,也許還有經(jīng)濟(jì)上的壓力。

在了解了這些困難之后,如果你仍然享受挑戰(zhàn),享受比賽,享受燒腦的感覺,享受通過題目的快感,那么——?dú)g迎入坑算法競賽。
下期預(yù)告:如何學(xué)習(xí)競賽C++