1. 程式人生 > >2018第九屆藍橋杯省賽,國賽參賽經驗心得分享(JavaB組)

2018第九屆藍橋杯省賽,國賽參賽經驗心得分享(JavaB組)

我來自廣東某大學,今年大一,剛剛參加完藍橋杯,這是我的第一篇部落格,希望能給你帶來一些幫助,不足之處希望指正。

關於比賽前的一些經歷

原本想要大二才接觸這個比賽的,趕巧在2017年12月14日那天有個外校的同學跟我說他報了這個比賽,並且說服我去水一波,當時在學校的際遇也並是很好,心裡感覺也挺不錯的,花300快錢水一波經驗試一下。趕巧在比賽報名截至那一天找了葉師兄報了名,報的是java,B組,記得當時師兄跟我說既然報了名就好好去學一下資料結構。那個時候連資料結構是什麼都不知道,java也才剛剛學到類,記得記憶猶新的是當時因為一個static怎麼用問了我嗎助班連師兄好久,其實我很多內容都沒了解過。匆匆過完了第一學期,我們當時學的是C語言,所以就沒怎麼去學java,寒假的時候才正式開始準備藍橋杯。

省賽前的學習

寒假有兩個月的時間,我大概花了45天左右的時間在學java的一些基礎語法,和一些演算法,當時買的書是《演算法4》,不得不說一下這本帶我入門的書,插圖很多,結合程式碼和圖理解起來比純程式碼真是好太多了。記得第一個去動手實踐的演算法是牛頓的迭代法求解平方根,當時覺得非常奇妙,之後就是第一章震驚了好久的並查集演算法,於是開始入坑。。。在這些日子裡,我的學習進度非常緩慢,沒人在身旁指導一下,一個演算法經常要花費很長的時間才能理解,到了寒假結束的時候終於緩慢前行到圖演算法了。。。dfs!彷彿打開了另一個世界的大門!開學,也就是省賽前一個月,開始刷題,很多問題基本都不會,經常看完答案才能自己去實現,很多問題也都是純暴力去解決,在藍橋杯的官網上做了一些題 ,把基礎題都做了,做了一些演算法提高和一些真題,我發覺我開始有遇到瓶頸了,演算法的瓶頸和思維的瓶頸!於是我又開始拿起演算法四那本書,補了圖演算法裡邊的單元最短路dijkstra演算法和多源最短路 floyd演算法(已經接觸了動態規劃了),開始解決一些迷宮問題和一些最短路問題,後來記得有一道題叫國王的煩惱吧,藉著這道題我又學了一個圖演算法Kruskal演算法,當時還有一個prim演算法,但我實現起來並不是那麼輕鬆,它是基於dijkstra實現的,而我比較喜歡並查集,於是我選擇了Kruskal演算法,這大概就是我在省賽前準備的圖演算法吧。思維的話,開始去學習動態規劃,學習動態規劃的過程是艱難的,一開始我難以理解為什麼是這樣子的,為什麼短短的幾行程式碼卻充滿了如此神奇的力量,於是我找了一個入門的文章學習了一下,初步入坑(其實我到現在都還是初步入坑的狀態,題目太靈活了,自己思維還是很侷限,難以解答),有了搜尋了基礎,於是自然而然地過度到記憶化搜尋,於是開始學習動態規劃,這是我當初入坑的一篇文章https://blog.csdn.net/rock_joker/article/details/68928150  終於到了省賽前兩週了,我把往年的題目拿出來刷一波(其實基本都已經看過題解的了),保持一下手感,不得不說的是比賽的狀態還是蠻重要的!

省賽:

4月1號開始比賽,比賽時間是9點到13點,我的一些建議是比賽前一定要吃飽大笑,我當時吃得不是很飽,幸虧開考前有個師兄給了我個麵包!我題目也記得不是很清楚了,大概就是第一題算日期很簡單,不要粗心就好了,第二三四我都涼了,一道是求面積,一道是摔手機(我到現在還不會),一道是大數運算(得結合檔案輸出),第5題程式碼填空是一道排序題(好像省賽很多次填空題都考排序),大題的話應該是AC了兩題半或者3道,最後一題自己瞎寫了個公式能過樣例。。。具體什麼情況也記不太清了,所以總AC題數在應該是2小題,2.5-3大題這樣子,最後結果也很不錯,省一,成功入圍國賽,記得當時知道自己入圍國賽的心情是多麼地激動啊,大概就是就差一聲吼了吧,畢竟可以去北京玩一趟,哈哈哈!

省賽結語:

其實這一次省賽難度還是不小的,數學問題還是挺多的,之後的省賽應該會越來越有趣。說實話,根本就沒用到什麼高深的演算法,什麼最短路啊,動態規劃啥的都沒用到,只用了個並查集(其實dfs完全可以簡單搞定,是我自己想得複雜了點)。

終於來到了國賽啦!!!

國賽前的準備:

四月份的時候事情比較多,基本都沒怎麼準備國賽,5月份才準備國賽,當時買了本《挑戰程式競賽2》(其實不適合這個比賽,基本用不上),然後就是大概就是把17年國賽的題目都刷了一遍。這一次又多準備了幾個演算法(結果一個都沒用上大哭),把最短路問題整理了一遍,單源最短路是dijkstra(不能解決負權重,可以使用優先列隊優化一下,時間是線性對數級別的),AcyclicSP(無環最短路,不能解決有環圖,基於拓撲排序,時間是常數級別的,),解決負權重的是SPFA(國人發明的一個演算法,其實是優化了BF演算法,可以解決負邊,不能解決負環,時間是kE,大大優化了BF演算法),多源最短路依然是floyd。然後還補了一個優先順序下調的並行任務關鍵路徑排程演算法,其實是AcyclicSP的一種轉變。動態規劃稍微整理了一下,01揹包,完全揹包(老是要和01揹包混了),計數dp(看情況),組合dp(有點難),又學了一個狀態壓縮dp(簡單瞭解了兩道例題,太難了),(也都沒用到。。。)又補了個線段樹_掃描線_離散化掃矩形面積並問題(只會掃描矩形,有道題叫油漆面積,然後也沒有用上。。。)  然後上考場!

國賽:

今年的國賽比去年的容易好多啊。。。1,2題很快就算完了,第3題一開始做不出來有點緊張,去做了4,5題,做完回頭把第三題也做了出來,第六題壓軸。。。難!看懂了題目結果卻毫無想法!!這個時候還剩下兩個小時,回頭把題目都檢查了一遍,自己寫了10個樣例給第四題,結果有一些樣例過不了,結果一直在那裡除錯除錯,越調越緊張。。。當時覺得簡單就把所有程式碼都放在一個main方法裡,結果就gg了(切忌!!!),其實這道題還是比較簡單的,思路清晰一點就能簡單A了。就這樣比賽結束了!!國二,這個成績對我而言還是十分不錯的,畢竟國一跟國二的差距還是很大的。大概a了4道或者4道半吧,前3題,半道4題(可能全錯),半道5題或者半道4題一道5題(如果題目不卡資料的話,我直接非常暴力的並查集,當時也想不出有什麼好的優化方法)。這一次國一應該得5道半這個級別,第6題和前5題的跨多有點大,應該是來把國二和國一分開的吧。。。總的來說還是十分高興的啦!畢竟以我目前的實力還是拿不到國一的!

最後:就是旅遊啦啦啦!帝都的文化氣息還是十分濃厚的,嘻嘻嘻!一天半的時間,去了北大(第一學府的學術氛圍很濃厚,教學樓的走廊很多椅子座子,環境非常棒,走廊異常安靜,大家都是安靜的在那裡,書或者課本,學習!去了你就知道哈,拿準考證就能進),然後去了圓明園(學生票5塊),路過清華(進不去),夜晚去了鳥巢(門口迴圈放著北京歡迎你,嘻嘻,很有感覺),水立方,天安門,故宮(學生票20,我第二學期沒蓋章,結果用不了原價60。。。故宮很大),然後去了銅鑼古巷吃。。。一天半的遊玩行程結束啦。。。

此時....2018年5月27日 22:33:07

來年加油!