1. 程式人生 > >2016年第七屆藍橋杯決賽心得

2016年第七屆藍橋杯決賽心得

這次比賽,成績並不是太理想,雖然我是一個渣二本(河南農業大學,一聽,種地的還學程式設計???),卻金剛不可奪其志,毅然決然的報了A組C,學院不支援,最後倔著脾氣自費報名了。省賽順利通過,可是決賽只拿了一個國三。想想要總結一下這次的得失,可是感覺我應該從頭分析一下自己的程式設計經歷了,做一個短期的總結吧(大致是七個月)。

作為一個農村的娃子(之所以說自己是娃子,因為我希望自己始終保持著一顆童心),和千千萬萬農村的娃子一樣,大學前,不知道啥是程式設計,更別提演算法了。

大學後,我只是感覺自己對計算機充滿了興趣,可是並不是對他有太多的瞭解。只是停留在打打LOL,玩玩魔獸,對戰一下紅警,PK一下火影:究極風暴(我可是火影粉絲哦),另外經常光顧一下4399小遊戲……我始終是一個初出茅廬的小孩子,啥也不懂。

我開始接觸程式設計,起初並不感興趣,並且認定我不會好好學習,所以一開學並沒有學,加之我的蘋果剛到第一天,我就花了五分鐘把它KO.了,我那叫一個鬱悶,自己開始琢磨如何裝系統,因為不問不知道,一問嚇一跳,重灌雙系統需要四百大洋,一向不摳門兒的我這次摳門兒了,畢竟想想自己五分鐘就懟了四百,心裡疼。

可是,我這是第一次接觸IOS,一丁點都不懂,於是我問學長,學長給我了三個字,“找百度”,所以,我整整查閱資料花了兩個星期,各種方案都試了,卻沒有一個方法真的可行(可能是網上的教程有些老了吧),沒有辦法,可是沒有辦法我也真得不捨得花錢去裝。

陷入了僵局,我該咋辦?繼續查資料唄,終於,我又經過兩天的查詢,成功的做成了一個啟動盤,並裝好了IOS系統(接著又裝好了win),當時,我那叫一個開心(畢竟啥也沒見過,這芝麻大的事那時候就讓我很開心了)。

這時大致是15年十月中旬吧,然後,開始學程式設計吧,學校都已經講了兩週程式設計課了,我卻一節都沒聽,都睡過去了,怎麼破呢?只好自學。

學程式設計,我首先要考慮的事是我用啥寫?用啥執行?也就是我該用啥IDE,這可難壞我了,於是我加了一些技術群和蘋果群,請教了一些人,他們都清一色的推薦我用Xcode,我也就聽從了他們的建議,然而,不知為何,我的蘋果商店下載Xcode一直失敗,我也感覺自己很失敗(後來知道是因為伺服器在美國,在國內下載時需要好一些的網速,而我這坑爹的校園網,也有一些其他的原因),依然是請教一個技術群裡的大神(如果有興趣可以來這個群裡看看,牛人挺多的,群號:367556880,當然這不是專門的演算法群,但是可以拓寬自己的眼界),然後他們告訴我,可以去開發者中心下載,於是我又折騰了幾天,才算是下載好,可是下載好後,我徹底蒙逼了,全洋宴,頓時我想換了……

我自幼英語極差,看著全洋的編譯器,我慫。於是我用win系統嘗試用VC6++寫,可是我一用,我立馬心涼了半截…我的心在滴血(現在看來,這個編譯器雖然低階,但是對我們初學者有好處,我就因為沒用過低階編譯器,在比賽中吃虧了),這下,我又耽擱這了。

這時已經十月下旬了。

然後我一個朋友給我分享了一個我感覺是改變了我的方向的一個視訊,為什麼呢?那時候我都想放棄程式設計,開始學PS了,想走平面設計(後來事實證明這不是我的菜,沒有藝術細胞),然後他給我了一個以Xcode為IDE的教學C的視訊,我開始第一次真正意義上的學習C,這時候十月結束了,也就是這個時候,我開始愛上程式設計了,愛上Xcode了。

這時候,很多學長都說一句話:程式設計的精髓是演算法。於是,我這麼愛裝逼的人,一定要學精髓,(後來發現,學長們都是說說而已,因為我們學校沒有深入學習演算法的),於是我就一步錯步步錯,走上了演算法的不歸路了。

用了一個月,我自學完了C語言基礎,當然是僅限於演算法層的,那些偏向應用層的部分我沒有學習,然後自己開始接觸演算法訓練題。和很多新手一樣,一開始啥都不會,但是我可以很自豪的說,我在學C語言第二週就挑戰雞兔同籠以及39級臺階問題(現在看來特別水的題,那時候著實費了一番功夫才做出來),那時候,我只學到了迴圈語句而已。

然後我通過這兩道題發現,自己的程式設計程式碼寫出來既費時又一團糟,於是我注意到了兩個問題:
1、程式設計習慣,命名規範問題;
2、遇見一丁點思路都沒有的題,我該怎麼辦?苦思?還是……

這時候,我想,習慣都是從小養成最好,我不應該等自己養成壞習慣後再改,於是一開始我就查詢各種命名規範,查到了匈牙利命名法和駝峰式命名法以及帕斯卡命名法,當時傻逼了,一看駝峰,好low的名字,不用;一看帕斯卡,英文名字,不感冒,不用;於是用起了匈牙利命名法,但是後來我又轉成了駝峰式命名法,倒不是說匈牙利的不好,只是沒有駝峰式優勢大,事實證明,駝峰式的確使用率越來越高了(瞭解命名規範的簡要規範:http://blog.csdn.net/f_zyj/article/details/51510085)。

至於第二個問題,我最後用一句話來說服了自己:學而不思則罔,思而不學則怠!那麼什麼方法學最快呢?我感覺就是在自己練題時,遇見不會的,多去看看別人寫的部落格還程式碼,這樣子可以快速學到很多東西。

這時,我感覺,我是真正的開始要學演算法了,此時十一月初。

然後,經過幾天的邊看邊練,我發現,網上很多題都是用C++或者Java寫的,C++居多,於是為了可以看懂別人的程式碼,我又花了半個月的空閒時間,學習了C++的語法基礎,學到了多型。

接著又經過了一段時間的學習,沿襲著自己的方法搞,感覺挺好的。到了十一月中旬時,學校舉行了藍橋杯的校賽,為了給省賽選出選手,我信心滿滿的參加了(我們這一屆雖然有幾個有程式設計基礎的人,但是那時我已經遠遠超過他們了),最後也順利過了。

學校說,會學院出錢給我們參加省賽(300大洋呢),我們報名時,我發現,藍橋杯分為A,B,C三組,我們學校我的專業對應的最低組別是B組,學校說讓我們都報B組,我內心不服,為啥我們註定只能報B組?於是我想方設法找老師,申請報A組,然而老師不同意,於是又一個學長說,“你就這麼看不起B組?…最好報B組,別不自量力,但是如果你真的想報A組,自己去跟團委老師說”。

於是,我就跟團委老師申請,然後因為老師不同意,我只好退一步說,我自費可以嗎?然後老師就同意了,因為我態度十分堅決,金剛不可奪其志。

因為是自費,我連指導老師都沒有(其實有沒有都一樣,因為老師並沒有指導,只是掛個名字而已,但是也的確受到一些不錯的老師的幫助和指引)。

這時,我已經開始了為省賽而奮鬥,我要讓他們看看,我不虛,我要剛起來。

接著,就到了寒假,我們學校有一個工作室在家屬院那裡租有房子,他們覺得我努力學習,我也想留校,於是我決定一方面學習PHP,以後為他們做一些後臺的東西,一方面準備省賽(回到家裡真的學不成),於是,我整個寒假,放假後,我在那個工作室宅了兩週,然後25回家,初二就又來了鄭州,寒假休息了七天,終於在一個月學完了PHP(只是學,沒有實戰經驗,但是學習過程中,我對後臺框架等等有了新的認識,提高了自己的認知)和資料結構,這時候我已經認識到,程式設計的精髓是演算法+資料結構,演算法也是每天堅持做題。

開學後(這學期我們主修課是Java,我不是太想學Java,但是為了增加見識和期末考好,我還是學了些許,學到了多型繼承等等),大概是二月末,離省賽還有一個月,我狠狠突襲了一個月,到了三月二十號,終於在省賽中無驚無險的晉級了。

學院也不再質疑我的能力(其實我真的很水,只是學校太弱雞了),學校一共晉級了五個,就我一個大一,然後學校又把培訓的任務交給了我,讓我帶著他們準備國賽(我們學校到現在還沒有一個正兒八經的演算法學習的環境,培訓都是臨時申請的教室,還時不時被佔,學院真得沒有支援太多,一切革命靠自己,這時,我深切的認為,我們需要一個演算法學習的環境,於是打起了今年國賽後申請實驗室的想法),然後緊張無序的準備了兩個月。

很快,到了五月底,我們由一個研究生帶隊去北京參加比賽。說實話,挺緊張的,因為A組的都是重點學校的人,像我這樣的只學了七個月的二本渣渣應該不多吧。本來就是想著第一年我參加省賽試試水,為來年準備經驗,的確,這次經驗倒是有了很多。

五月二十八日,也就是昨天,不對,現在都凌晨了,應該是昨天的昨天,下午一點,我們到了北科大,那是我們的考場,貌似我們那裡又是幾乎就我一個A組,和省賽一樣,因為考場是按學校分的,在北科大參加競賽的差不多都是二本吧,就我一個A組,那叫一個無奈,就我一個神經病吧。

兩點,準時入場,開始考試,我一上來就出岔子,我報告老師,無法解壓試題,後來老師笑笑說,區分大小寫(解壓有一個密碼,對大小寫敏感),然後就正式開始了,開啟第一題時,已經過了十分鐘吧。這時,老師開示發麵包和水還有一個瓶奶,我當時還高興,這個比賽服務真好,後來我發現,其實這也是一個素質的考驗吧。

由於我一開始昨天就出岔子,所以有些緊張,於是打開了礦泉水,三兩分鐘喝完了,然後控制不住自己,又喝了一瓶奶,這時我後悔啦,可是後悔也來不及了,規定一個小時內不準上廁所,然後就開始……你懂得。

此時的狀態不好,剛好加上第一題題意不是太清楚,後來組委會又專門補充說明了,但是我已經在上邊亂了心神,(憋得慌),所以用了一種特別多餘的方法去解,最後還錯了,於是我心慌了,感覺這次要掛,然後一到三點,我立馬去了廁所,但是因為時間已經過去了一個小時,我卻卡在了第一題,我著急,麻溜的方便完(紳士的說法,其實我還是更喜歡說尿完),又回去做題了,這時剛好組委會進行了A組第一題補充說明,然後我用了五分鐘重新寫,成功得到了答案。

接著看第二題,簡直不像話,搞這麼簡單的題,我又用了三分鐘輕鬆拿下,此時已經三點十一了,我心裡稍微緩和了些,開始做第三題,程式碼填空,這個題也很簡單,用了十分鐘分析檢驗,做了出來。

然後開始搞第四題,因為這次考試波折太多,我情緒不是很穩定,長時間的失眠導致我注意力很難集中,第四題我想岔了方法,最開始想著暴力遍歷,寫到一半想起來這是程式大題,有時間限制,於是我改成了dfs,寫到一半,我想會不會超時啊,於是又改成了bfs,然而當我寫完了,一看要輸出路徑,差點吐血,只好又改成了dfs,這一來回折騰,修改程式碼,都知道,修改程式碼是一個災難,於是我在比賽時碰見了這個災難,我出了BUG了……

我想deBug,可是這個編譯器我第二次用(第一次是省賽,那時寫得很順,沒有任何bug出現,所以就沒有把這個當回事,自己學程式設計七個月,幾乎沒有用過低階編譯器,結果坑死在這裡了),根本不知道怎麼用,找到了deBug按鈕,但是不知道具體怎麼搞,在這個上面,整整折騰了四十五分鐘,我一行一行的自己手動模擬執行,最終在剩餘了一個小時二十分鐘時搞出來了。

然後一看時間不夠了,只能寫一道題,然後就同時看了第五題和第六題,二選一,我選擇的第五題,因為第五題是KMP,而第六題我拿不準,可能是連結串列吧,畢竟資料結構我只是學了一遍,並沒有深入研究,原本打算暑假留校學資料結構和演算法的。七個月的時間是不足以我深入學習這些高深的東西的。如果是連結串列,那我就真的選對了,因為C語言實現連結串列挺乏力的。

第五題我感覺自己應該是可以過的,可是跟據我自己的比賽成績來看,想必是被KO.了,應該是隻過了部分資料吧。

最後,時間無情的被用完了,我也放棄了掙扎了,想掙扎伺服器也不給面子啊。

昨天下午,成績出來了,A組別C/C++國三,不是很好,比賽時狀況頻發,一共去了四趟廁所……哎,誘惑也是一種考驗啊,對於我這種把事物只分為能吃的和不能吃的人而言,比賽發水和奶已經是極大的誘惑了,竟然還發麵包,我想靜靜。

總的來說,這次比賽給了我很多經驗。

就演算法準備方面,我感覺應該著重放在dfs和bfs上,因為這個每次都要考,興許還是好幾道,然後一定要學學KMP和Manacher演算法,因為鐵定會考一道字串處理的問題,而字串處理問題你把這兩個演算法搞定,那其他的就不在話下,考試時只要看懂題就能過,其他的基礎的演算法,都要會。難度最大的壓軸題嘛,我感覺以後會越來越難的,連結串列、樹、圖什麼的,如果你想多拿分,那就都看看吧。

另外,其他的方面的經驗,最是寶貴了。
一,控制住嘴,儘量不要吃喝提供的那些東西,這也是一個考驗;
二,控制住眼,不要過早的看後邊的題,以免亂了思緒;
三,控制住手,不要幫助眼去看後邊的題。

最後,最最最重要的是,一定要在競賽前多熟悉競賽提供的IDE,這個一旦出現問題,可以把你急死,不要問我為什麼這麼強調,我就是被急死了的那個人。

抱著枕頭準備森!!!(希望這個可以對下一屆參加藍橋杯的新人提供一些幫助,我是個渣渣,但是渣渣也有一顆不安分的心,我要報A組!!!金剛不可奪其志,A組,繼續剛,咱不慫!)