標籤:存在 積累 構造 獨立 思想 for 幾何 訊息 類比
距離大一入學已經經過了兩年半的時間,離我第一次接觸C語言也過去了兩年半。向王瑞洲(以下簡稱GodWang)請教字串的讀入、01背包的情景還曆曆在目,彈指一揮間,如今已是大三。
在高考結束的時候,莫名其妙的只想填電腦類的專業,也許是出於對編程的好奇,又或許是覺得會編程的人特別帥。在糾結了很久是選擇電腦還是軟體工程之後,我決定選擇軟體工程,因為我對硬體方面沒有太大的興趣。就這樣,我和爸爸媽媽將全國帶有軟體工程專業的學校都找了出來,尋找自己能去的地方。最後,我來到了這裡——浙江財經大學資訊學院。
大一入學第一天晚上,張帥老師和其他另外幾個老師就來我們的寢室,和我們講了很多大學生活學習上的事,提及了ACM,那應該是我第一次聽到ACM這個名詞。那時的我,只是一個萌新,只聽到這是一個超級厲害的編程競賽、訓練很辛苦,在我的腦中也只是短暫的停留,並沒有太多的留意。那天晚上,倒是我會變魔術的事情被老師們知道了,在軍訓中、一元錢活動以及新加坡學生訪問我們學院的時候,老師就讓我上去表演魔術。
大一軍訓結束,開始正式的大學生活。其中有一門《C語言程式設計基礎》的課程,是陳老師給我們班上的。在課後,老師總是會在學校OJ上布置一些作業,那也是我第一次知道了OJ這種系統。國慶回家,第一次做作業就遇到了斐波那契數列,至今我還清晰的記得,第一次寫斐波那契數列,向厲偉鍵學長和沈雯學姐求助,整整花了4個小時,在經曆了無數的Wrong Answer之後,終於Accepted了,在獲得Accepted的那一個瞬間,心情簡直是激動無比的。
因為陳老師是ACM隊的教練,所以在上課的時候,經常會給我們看學長們參加ACM亞洲地區賽的熱門排行榜,也經常給我們講關於ACM的起源、發展以及獎牌的含金量。正是在那節課上,我第一次深入瞭解了程式設計競賽。那個時候,我大概就正真地被這比賽吸引了吧。於是,我在心中下定了決心要參加ACM訓練,每周末我都會去老師安排的機房訓練進行學習,也會在校OJ上瘋狂的刷題來熟練C語言的文法。刷OJ是瘋狂的,因為有系統中有Ranklist的介面,總想要看到自己的排名往上爬,然而這隻能通過自己的努力來達到。那段時光中,我大概每天6:00多起床,晚上10:00上床睡覺,可以說是沒日沒夜地在那做題。
大一飛快地學習過程中, GodWang協助了我很多,他在高中獲得了noip一等獎,因此這些簡單的文法對他來說簡直就是小菜一碟。那時,我什麼都不會,經常去他寢室問他問題,幸運的是,他很願意協助我。在我學習文法的過程中,陳老師和GodWang成為了我的啟蒙老師。對於我來說,這一切真的很幸運,能遇到ACM教練給我們上課,能遇到優秀的同學協助我學習,是可遇而不可求的。
看到陳老師發布了藍橋杯選拔的訊息,我並沒有在意,因為我想我那時什麼都不會,去比賽只能墊墊底,就沒有去參加藍橋杯選拔賽,但是最後陳老師給了我一個參賽名額。
聽說有ACM院賽,我欣然報名參加了,不幸的是,那次比賽我只通過了3題,排名很靠後,只拿到三等獎,完全打崩了。那是我第一次參加比賽,比賽打崩的原因有很多:有一些題目的資料水了,導致其他人用錯誤的方法通過這題,而我知道這種方法是錯誤的,就沒有提交,還有就是比賽經驗不足,不會跟榜。比賽結束後,很沮喪,天空又下著大雨,心情頓時就像高考落榜一般,覺得很對不起陳老師給的那個藍橋杯參賽名額,畢竟有很多院賽排名比我靠前的同學沒有參賽名額。
在大一上期末的時候,我在OJ上刷了498題,大一上就這樣過去了。
寒假,我參加了3天的集訓,老師說搜尋很重要,是ACM入門基礎,回家之後我開始自學搜尋(dfs、bfs)。回到家的那天晚上,我翻開了課本,一行一行的看“骨頭的誘惑”的代碼,終於在debug功能下,我初步理解了遞迴。陳老師給我們準備了兩個搜尋專題,大概40多道題目。那段時間裡,每天早上第一件事情不再是開啟QQ,而是開啟hust上老師掛的專題開始刷。我還記得,大年三十那天白天通過了那一年最後一個題。整一個寒假學習了搜尋,以及一些簡單的結構體文法、STL等,對動態規劃略有涉足。
大一下開學,GodWang問我寒假學了什麼,我說只學會了搜尋,然後他建議我去學一些樹狀數組、並查集、RMQ編碼量較小的資料結構,並且建議我去開通一個部落格用來記錄自己通過的題目的代碼以及題解。因此,大一下開學那段時間,我學了樹狀數組、並查集等內容,也開通了部落格www.ZhouZhentao.com,從開部落格那天到今天,所有AC的代碼我都記錄了下來。
之後,陳老師進行了浙江省大學生程式設計競賽的組隊,很幸運,我和GodWang還有天棋學長組到了一起,我們隊伍一直組到了今年的地區賽結束。兩個隊友都比我厲害很多很多,我是隊內最菜的。在大一下省賽訓練的那段時光裡,看著他們寫代碼,我學到了很多編程技巧。
藍橋杯省賽,我們去了浙江傳媒學院比賽,那是我第一次出校門去比賽,很緊張。最終比賽結果出來的時候,簡直高興地不得了,第一次出門比賽就拿到了一等獎,雖然B組比賽很水很簡單,但這是第一次,而且拿到一等獎意味著可以去北京大學參加全國決賽。還記得,大一的同學中是我和GodWang還有xiang578拿到了藍橋杯省賽一等獎。
在省賽中,我跟著強勁的隊友獲得了金牌。
第一次去北京,第一次出省,第一次在火車上過夜……這一切對我來說都感到很新奇,到達了北京之後,我們去參觀了北京大學和清華大學,真的都很大。比賽結果我獲得了一個二等獎,GodWang是一等獎,天棋學長是一等獎第一名。對於我來說,依然很開心啊,完全當做是一趟旅遊啦。
大一下比賽結束之後,我和老師說我想學圖論部分的知識,老師把我叫到了辦公室,給了我一本圖論書,然後我就回去看了,之後的幾個月中,直到大一結束的暑假集訓,我才把那本書學完,學到的知識還是很多很多的,有最短路、最小產生樹、二分圖匹配、網路流、費用流等等。
原本我以為,ACM競賽會像高考數學一般,大多數題目都是送分題,平時認真學習就能做出來。然而,這種思想在我學習了網路流之後就被完全顛覆了。這完全是一個比拼智慧的競賽,對於參加這個比賽的同學來說,自學能力一般都是比較厲害的,也就是說學習一個演算法是相對較為容易的事情,花時間,花精力必然能夠領悟演算法的真諦,難的是運用演算法解決問題。演算法僅僅是解決某個問題的某個步驟中的工具,而不是看到題目就想去套某種演算法。
時間過的很快,大二上開學了,要準備去地區賽。我們隊去了長春站、北京站以及ECfinal站。這是去年的比賽經曆以及感悟http://www.cnblogs.com/zufezzt/p/4971067.html。在比賽間隙期間,我花了不少時間去學了線段樹、2-SAT等演算法資料結構。
在地區賽結束之後,我完成了張帥老師C#期末課程作業。想學以致用,我花了一星期寫了一個消滅星星。http://www.cnblogs.com/zufezzt/p/5039755.html。
大二的寒假,在天棋學長的建議下,我開始去codeforces上做題目,感覺那些題目的風格和比賽十分相似。在那段期間裡,我還鑽進了動態規劃的大海,瘋狂做各種動態規劃的題目,線性dp,DAG上的dp,樹形dp,區間dp,狀壓dp,做了一大堆dp,做了這些之後,感覺對狀態的分析有了更加深刻的理解,很多很多演算法都是狀態之間的轉移,對狀態的分析尤為重要。
到了大二下,也就是2016年開始,又是一個迴圈,開始了藍橋杯省賽、浙江省大學生程式設計競賽、藍橋杯決賽。這次去藍橋杯,我有了更足的信心,在藍橋省賽中獲得了一等獎,然後去了北京決賽,這次去北京的只剩下我,GodWang還有xiang578了,決賽上發現什麼題目都不會寫,只好上暴力,考完出來我們都覺得這次要大崩盤。成績出來,我和xiang578都獲得了一等獎,很幸運,今年我是一等獎第一名,特等獎是是浙江理工大學參加過ACM全球總決賽的大神。在我們的討論群組裡,天棋學長還開玩笑說我們隊是萬年老二……。今年的省賽中,比較驚險,最後一個暴力枚舉+貪心的題,由於一個小錯誤,一直WA,直到最後我們一起查錯,終於發現了問題,有驚無險,跟著隊友拿了金。
在今年的上半年,先去考了PAT乙級,得到了滿分。之後刷完了甲級的題庫,在甲級的考試中也同樣得到了滿分。刷PAT甲級的題目最大的收穫就是編碼的速度與正確率有了大幅度提高。
暑假裡,我們進行了多校訓練,訓練的題目難度真的是有點大,但是我已經能獨立做出來一些題目,這一點是自己完全能體會到的。每次賽後,都會把不會的題看著題解進行補題,在補題的過程中也總結了一些解題經驗,接觸到了很多新的演算法知識:尾碼數組、FFT,最大權閉合子圖,CDQ分治等等……,暑假訓練的收穫是很大的。
我還記得有一個題,在想了很久之後終於有了思路,然後開啟電腦開始敲,在經曆了無數次的WA,TLE之後,終於得到了AC,那是淩晨,結果激動的一晚上沒睡著覺。
還記得有一次做codeforces上的一個構造題,思路立馬就有了,但是寫程式會有很多細節,寫完提交發現在第92組測試資料的時候答案錯誤了,也就是說前91組答案都是正確的,那時候簡直就要崩潰。最後直到淩晨1:30左右,我發現了一個之前沒有考慮到的情況,改了之後就AC了……,在ACM路上,有太對這樣令人激動、感動的瞬間。
這學期的地區賽,我映像最深的是青島賽區那個費用流的題目,第一眼看到那題,我就覺得能AC,而且解題要點也想到了,但是就是TLE。賽後聽題解說是浮點誤差導致的逾時,加一個eps消去誤差或者把double改成float就能AC了……,當時簡直就是崩潰了,也就是如果我們第一次提交的代碼就主要到這個小問題,那麼在那場就能奪金了……,畢竟解題的思路完全是正確的。似乎每場比賽,都有很多隊伍能過的題我們不會做,以後還是要繼續拓寬解題思路、總結經驗……
參加ACM提高了我的表達能力,老師經常會安排學長給學弟學妹們講課,想把一個問題講透徹,自己必須掌握其根本,又要有良好的表達能力,經過從大一到現在那麼多次講課,我十分能體會到自己的表達能力變強了不少。
參加ACM也提高了我的做事與為人處世的能力,前段時間舉辦了院賽,我參與了從命題、整理試題到採購氣球、踩氣球、發氣球等一系列事情,做了一個總結http://www.cnblogs.com/zufezzt/p/6129934.html。
ACM競賽,很多人都是從入門到放棄。我們這一伙人(天棋學長,godwang,我,xiang578,haihongs)從大一堅持到了今天,都有了收穫。我很幸運,很開心能夠遇到這樣志同道合的朋友能夠在9406一起學習,一起打地鋪睡覺、朝著同一個目標一起奮鬥。這個領域,智商高的人很多,用功的人更多。經曆了那麼多場比賽,開闊了很多眼界,那次帶學弟們去寧波CCPC決賽,親眼目睹了清華大學神犇們解題的經過,真的是歎為觀止。參加這個比賽,還有一個好處就是不會自我膨脹,始終會覺得自己很菜,因為總是能看到很強的人排名比自己靠前,我能做的只能是始終抱著謙遜的態度不斷的學習,不斷地積累與總結,不斷地超越前一天的自己。就像比賽的排名,如果從某一時刻開始不能AC,那麼排名只會降不會升。
在接下去的時間裡,我願意繼續參加ACM,這學期的比賽場次較多,靜下心來學習的機會很少。下一個學期基本沒有什麼課了,計劃在寒假裡以及下學期中找回之前瘋狂刷題的感覺。回首看自己學過的東西,仔細想想自己真的很菜,沒學多少知識,而且學到的都是不難的。要學的東西有很多很多,必須提高自己的技能。如果有公司面試的機會,也願意去嘗試一下。
對於學弟學妹們的訓練計劃,我建議是從簡單的東西開始,首先文法不能存在任何問題,可以去刷PAT乙級題目。也必須學會簡單的資料結構與演算法,至少課堂要求的都要會,可以先學習搜尋,然後刷PAT甲級題目。然後開始演算法學習,一開始可以學習簡單易寫的演算法,如二分、三分、簡單動態規劃、構造和一些簡單數論題目,開拓一下思維,因為這些題一般不存在高難度演算法知識,都是靠想的,這些題目可以是codeforces Div2 的前三題;也可以做一些編碼量較大的類比題,訓練編碼的速度與正確率。之後就可以刷專題開始學習一些樹狀數組、RMQ、並查集、線段樹等較為好寫的資料結構;網路流、二分圖等圖論知識;AC自動機、尾碼數組、迴文樹等字串處理工具;以及做一些數論,計算幾何的題目。但在學習演算法的過程中,我覺得只學演算法是不合理的,還是需要配合做codeforces題目來靈活運用演算法知識解決問題。也必須要讓學弟學妹們知道,這不是一個套演算法的競賽,而是一個思維競賽,演算法是解決問題過程中的協助工具輔助。做codeforce的題目並不一定要求現場做,賽後做也沒有太大的關係,一般div.2的題目做4題還是可以的,對於想不出來的題目,看了題解也要寫出來。
2016年的總結