自從我在博客上留下了qq之后,不時會有熱心網友來詢問我關於算法競賽的經驗。由於每次我都會想到哪兒說哪兒,導致遺漏一些比較關鍵的信息,所以我試圖總結一些問的頻率比較多的問題,
同時我也希望在我還尚未遠離算法競賽這個圈子的時候,對我兩年來短暫的職業生涯做一些總結。
首先,我必須聲明,以下的僅能作為一位即將退役選手個人總結的經驗,如果有不認同的地方,歡迎通過qq或者評論區交流。
其次,這不是退役記,退役記很大一部分是寫給自己看的,而這篇文章我會盡量保證客觀。並且,我畢竟還沒有事實意義上的退役——下個月還有一場EC-final.
關於我的背景:0基礎,大一接觸ACM,雙非 + 弱校,往屆學長沒留下什么傳承,算法競賽全靠自學,19賽季訓練/獲獎情況 看這里,以下只能作為個人提供的參考,不是什么成功者/過來人的指導
1.參加算法競賽的初衷最好可以是熱愛
將"熱愛"放在第一點說,是因為我覺得他足夠重要——如果只是因為單純的喜歡做算法競賽的題目,那剩下的問題只是足夠的訓練時間和志同道合的隊友了。
但事實上,大多數的競賽選手往往抱着功利的心態參加算法競賽——希望拿一些牌給自己的簡歷上增加亮點。並不是說抱着這種心態的人一定打不好比賽,相反,如果自制力夠強的話,即使是抱着追求功利心態的想法也可以打到很不錯的成績。
事實上,像我一樣功利 + 熱愛也未嘗不可,一方面有來自拿獎的壓力,一方面也不會把刷題看作是一件需要很大努力的事情。
2.我始終認為ACM作為一個團隊比賽,最最重要的是個人能力,其次是隊友。
首先個人能力是毋庸置疑的,否則為什么三個毫無配合的中學生可以虐區域賽的場。
其次,我說的來自隊友的重要性,並不單指比賽的時候需要發揮出 1 + 1 + 1 > 3 的效果(當然這是一個隊伍起碼需要做到的)
更重要的是,來自隊友的督促是可以逼迫自己加緊訓練的,如果隊內存在1-2個從來不參加訓練的摸魚選手,那對剩下的人訓練積極性是一個非常大的打擊。
如果有志同道合的隊友每天跟着一起保證日常訓練,難題交流的話,不僅能夠有效提高水平,也會提升參賽的興趣。
3.怎么選隊友?
·首先,隊友水平不可以比你菜太多,因為這往往意味着不夠努力或是智商差距太大。當然,如果是因為訓練時間上的差距還是可以接受的(例如有一些基礎的OI選手和0基礎選手或是大三和大二選手組隊)
·其次,別找混子隊友,如果只能匹配到混子隊友的話,專注於把你自己的實力提升上去匹配更強的隊友組隊。如果恰好整個學校的acm選手除了你都是混子的話,我覺得如果不是天賦異稟或非常熱愛,可以另謀出路。
·隊伍中一定要有個能起帶頭作用的隊長,需要組織訓練和做題,調動隊內氛圍,及時把摸魚隊友換掉等等,當然,不是說隊長剛組隊就需要有這些能力,但是需要他在之后的過程中學着去干這些事情,這些"臟活累活",總是需要有一個人站出來做的。
·總之,選隊友的指標沒有那么復雜,在可供范圍內選擇 夠強 + 夠努力 的隊友,適用於多數情況。
4.怎么平衡日常學業?
首先,但凡不是高中階段就具備強大實力,進入大學以后可以隨便獲得獎牌的選手,一定會因為算法學習和日常訓練消耗大量的時間,因此不可能不影響課內學習。
Q:那我怎么聽聞jls,clj等人一邊參加算法競賽一邊績點無敵呢?A;他們如果不參加算法競賽專注於績點,是可以拿到更無敵的績點的,只是這沒必要。
所以,如果真的熱愛算法競賽,是需要有犧牲一些績點或者上課時間的覺悟的,這也是我為什么之前強調隊友的重要性——大家一起逃課訓練才帶勁嘛,一個人為了隊伍成績逃課,另一個人為了個人成績上課,影響逃課人心態是必然的。
由於我們隊的特殊性——大二的時候隊友在實習,大三的時候隊友在考研。所以我們隊很難做到我希望的那樣一起逃課訓練,這也直接導致了我決定分出一部分的時間管一下績點。所以我雖然兩年的成績是專業第一/二,但我清楚的知道我並不是兩頭兼顧,而是如果我不分出管績點的時間一心訓練的話,我們一定可以取得好得多的成績的。
所以,如果能找到願意跟你一起逃課訓練的隊友,我還是非常建議放棄一部分績點(甚至是大部分)去訓練的
5.算法太難了?我連最簡單的DP/01背包都學不明白?
對於我們普通人來說,這幾乎是必然遇到的問題了。但他其實並不如你想象的難,萬事開頭難在這里形容的恰到好處。同時,很多專題往往開始是一些比較簡單的模板題,稍微做幾題就會上升到銅牌/銀牌題的水平了。對於一個剛入門的初學者來說,一下子遇到這些充斥着思維的題實在是太難了。我當初也是靠對着題解一行一行敲代碼來的(盡管這沒什么用),DP的狀態轉移公式怎么看都看不明白——但是總有一天,你在過了一段時間再回過頭來看它的時候,會覺得恍然大悟,會突然明白DP原來是這么一回事情。
6.關於學習的路線,學習的方向?
這個在這里就不具體說明了,在算法競賽影響力逐漸擴大的今天,這些東西百度上搜一搜就能搜到了。洛谷,vjudge上也有很多的推薦。
只是可以說明:在一開始,數論(擴展歐幾里得定理等)/圖論(最短路)/數據結構(線段樹)/其他(DP,貪心)等等的算法幾乎是沒有聯系的,並沒有嚴格的學習拓撲序,如果你學不懂DP,你或許可以嘗試一下學學最短路或是線段樹,這都沒有問題,畢竟我是在打了一年半之后才正式開始接觸數論。為什么說是一開始?因為到了后面,就會把這些知識相結合,出現像線段樹優化dp的題目了,這時候就要求你兩者都會。
7.和同級/學弟 的水平相差太多,感覺OI選手天下第一?
迷信OI選手不可取。如果不去追求頂尖的水平(打入world final 或是 排名top5)的話,大一開始0基礎完全是可以做到的,更何況ACM幾乎是一個一個隊花下多少時間,用了多少努力,配上成員相應的智商,就可以收獲相應獎牌的比賽。沒必要和特定的人/群體去比,如果參加比賽沒有拿到銀/金,大多數情況下只是因為你的努力不夠到達這個層次,而不是因為你是0基礎選手。
遠有kuangbin大三開始problemA + B,研一打入wf,近有我隊友機械專業大三開始接觸ACM,同時考研,大四能拿金牌題的一血。
彎道超車的事情在圈子里是十分常見的事情,退一萬步說,尋常OI選手打到大三總共五年,0基礎選手只要願意打到研一也是五年,如果願意,五年時間幾乎足夠任何選手沖擊world final了
8.推薦書籍?
首先我是不建議僅通過看書學算法,對着一本書的專題楞做的。我個人還是建議通過查博客/看書/看題結合起來學,單看書容易睡着,也容易勸退
最經典的劉汝佳的白書/紫書,但是我個人是不建議不是天賦異稟的初學者對着他刷的,里面很多題還是太勸退了,我到了快退役也沒把它看過多少
李煜東的算法競賽進階指南[藍書],這本我刷過幾個章節,寫的挺不錯的,建議對着刷的同時找同類型的題做,每個專題題量還是太少
挑戰程序設計競賽,這本書挺適合初學者的,沒有上面兩本這么難,看看也挺快,可以看一看
事實上網絡上資料這么多,並不是非要買幾本書刷的
如果還有什么其他的問題或是有不同的意見,歡迎在評論區或者加qq溝通
