又一年的CSP-J/S初賽落下帷幕,幾家歡喜幾家愁。有幾個小朋友因為今年的奇葩政策(不以分數取優)沒能挺過初賽,心中彷徨:自己堅持了兩年的OI之路竟以提前退役告終?
Go or Stay, 這是一個問題!對於一個OIer來說,學習兩年竟然倒在初賽上,這本身就是一個需要反思的問題。是自身能力不夠,還是知識儲備不足? 在我看來,全不盡然。
我一直信奉天賦決定上限,努力決定下限。對於CSP來說,這是隻要努力就能達到的高度,天賦可能只需要那麼一丁點兒。當你走出考場驕傲地說這次的選擇題太水了,請明白:那是你趁暑假別人出去嗨的時候把歷年的初賽題刷了一遍的成果,是你刷完題還被教練逼著在部落格整理錯題的收穫。這是你努力的結果,跟天賦關係不大。
有句話叫書到用時方恨少。但對於CSP來說,就是基礎演演算法、資料結構、搜尋、貪心、動態規劃、圖論,再加上一些簡單的數學知識。兩年了,想必這些東西你已經瞭然於心,讓你看幾遍,就能過AcSaber,至少國慶這三天是這樣過來的。也就是說,在知識儲備上,你足以面對CSP。
那問題到底出在哪裡?
我們刷過很多題,零零總總有300~400道了吧,按道理也算是一個初出茅廬的OIer。但就是這樣,讓你分析深度優先搜尋,完善區間合併、氣泡排序,還是會出錯。我們來分析分析這是為什麼?
首先,在學習或者刷題的過程並沒有「沉浸」其中,停留在「淺層」。只學會了怎麼寫程式碼,卻忘了問為什麼這麼寫,如果改變一下會怎麼樣,最好情況是什麼、最壞情況是什麼,輸入資料對演演算法有無影響?這是演演算法學習縱向上的要求。
其次,一直停留在簡單問題或是模板演演算法上,缺乏應對變化的能力。A+B問題我能5秒AC,然後呢,這有什麼意義?如果一種演演算法的模板已經「吃透」,那麼就應該在這個基礎上做一些廣度上的擴充套件。例如:學會了快速排序,就應該使用快速排序的思想解決一些實際問題,如查詢第K大的數,而不是偷懶用一個sort水過。今天水過的問題,考試中可能就是噩夢。
最後,不注重思維上的訓練。碰到難題不願意動腦,不知道從哪裡下手,過分地依賴外部力量。OIer都喜歡謙虛地自稱蒟蒻,讓大佬給思路、找問題。殊不知大佬也是從小白一點點成長起來的,正因為在成長過程中善於思考、認真總結,才能終成大神。所以,作為一個OIer最重要的就是要培養獨立思考的能力。
想要避免"淺層學習",可以從這幾點下手:
而這一切,都需要不斷地反思和總結,所以,深度學習最好的手段就是寫部落格。
對於基礎演演算法,寫部落格的目的是為了強化自己對基礎知識的掌握、理解,嘗試分析每種演演算法的優與劣,在不同情況下的時間複雜度、空間複雜度,真正"吃透"演演算法。
對於那些自己踮起腳才能解決的問題,寫部落格是整理自己思路的過程,總結出錯的原因。真正讓自己做一題會一題,而不是做完就忘。
思維能力的訓練不僅要培養獨立思考的能力,也要學會他山之石可以攻玉。看大佬題解不可恥,可恥的是看完就忘,沒有變成自己的東西。對於題解要"看懂」,更要"寫明白"。
作為一個兩年的OIer,你已出發很遠,但卻沒有看到曙光,這是一段寶貴經驗,希望對你的人生有所啟發。
It’s up to you to decide whether to go or stay。