1. 程式人生 > >沒有什麼不可能—記山東省第六屆ACM程式設計競賽(退役總結帖)

沒有什麼不可能—記山東省第六屆ACM程式設計競賽(退役總結帖)

 

        大一下學期,第一次聽說了ACM這個詞,當時每週六也開設了培訓課,但我好像一次也沒有去過,當時對這個詞並沒有什麼太大的印象。後來學院裡引進了自己的OJ,那時候我連基本的輸入輸出格式都不懂,當經歷了一堆的WA,TLE之後突然換來的一個AC竟帶來了莫名的喜悅。後來學院舉辦了第一屆ACM程式設計競賽,我報名參加了新秀賽和團隊賽。三個小時的新秀賽,當時貌似做出了三道,意外的拿到了一等獎,這也成為了我大學生活的一個重要轉折點。四個小時的團隊賽,做得很艱難,各種不會,最後只做出了一道,排在三等獎的末尾。比賽之後,我和班裡的張帥(ZS,後來組隊兩年多的神話隊友)加入了學院的ACM集訓隊。經過查資料和老師的講解,我才知道這個競賽是個高水平的程式設計競賽,影響力特別大。當時老師問我,“比完賽以後準備放棄嗎?”,我的回答是“不會”。就這樣,我的大學ACM生涯就正式開始了。
        當時集訓隊裡學長學姐們在準備第四屆山東省ACM競賽,他們講題的時候我們新成員也會去聽,但是聽得是一頭霧水,問我們哪裡不懂,貌似當時誰也沒敢說話,在那不懂裝懂,感覺自己的水平真的是太低了。後來也跟著他們一起做題(雖然做起來很艱難)。當有一天老師告訴我說讓我作為觀光隊去參加省賽,當時第一感覺不是興奮,而是沒底,懷疑自己的能力。就這樣,我和ZS和楊英明(YYM)組成了一個隊伍(MOVE ON),一開始三個人在一塊合作有些尷尬,畢竟不太熟,後來經歷了幾場練習賽和平時的相處,三個人就打成一片了。
        第四屆山東省ACM競賽,是我第一次去別的學校(中國石油大學(華東))參加比賽,很興奮。到了那裡看到山東省的學校所派的所有隊伍,滿滿的人,寬闊的場地,整齊的電腦,牆上掛滿了氣球,這樣的場面我還是第一次看到,參賽的這兩天裡,有太多的第一次,新奇又開了眼界。參賽的第二天是五個小時的正式比賽,我們隊就做出了一道題(第一題計算幾何),看著周圍強隊的氣球一個個升起來,感到了自己與其他院校學生的差距。值得高興的是,學長學姐們最終拿到了一塊銅牌(集訓隊得到的第一塊牌)。從青島回來以後,想了很多,除了見世面之外更多的是思考,為什麼那些題目別人能做出來,自己卻做不出來,二本學校的學生就真的不如那些一本院校嗎?就這樣,我堅定了走ACM這條道路的決心!
        老師對我們說,今年你們是星隊,明年你們就是主力。接下來就是一年的訓練,現在回想起來感覺訓練的很糟糕,大二上學期過去以後,發現自己並沒有學到什麼東西,沒有系統的訓練,過的很糊塗。大二下學期距離省賽還有兩個多月,老師要求我們平時沒課必須到實驗室裡來訓練,從那時候好像才開始真正的訓練。感覺做了很多題目,也發了很多的解題報告,在省賽到來之際竟產生莫名的自信。然而,現實又狠狠地抽了自己一鞭子。2014山東省第五屆ACM程式設計競賽,我們隊名是Miracle,到那以後就是比賽前的全程興奮,就在賽前的幾天我還對隊友說這次最少能得個銅牌吧。到了正式比賽的時候,首先YM做出了一道水題(求10以內的階層),然後YM和ZS一塊做關於一個樹的簡單題,經歷了一次WA以後換來了AC。當時感覺開局還不錯,也很有信心。然而,從那開始就陷入了卡題狀態,A題是一個數學積分題,我和YM一起做了很久,心情也變得越來越浮躁,還好最後終於做出來了,信心又一次產生。然而,我們又陷入了卡題狀態,離比賽結束一個多小時的時候,我們好像在銅牌的倒數第幾名,後來就封榜了。最後我們把目光聚集在了最後一題上,這個題大一的星隊都做出來了,我想我們也應該能做出來吧。三個人想了很久。。。依然沒有思路。我記得我自己當時的狀態完全是大腦掏空似的一片空白,也不知道想什麼,就是很木然的坐在那。就這樣,我們到比賽結束也沒做出那道題。走出賽場,心情很沉重,之前的興奮勁早已煙消雲散,不知道最後一個小時銅牌能不能保住(也知道很懸),天空下著小雨,我們隊伍走在外面,心情很複雜,一塊照相也沒有精神。後來結果出來了,我們沒拿到牌,排在銅牌後的第三位,同校的大二另一個隊也很遺憾的排在銅牌後的第二位。不過值得高興的是,學長學姐們做出了五道題,再一次拿到了銅牌。就這樣結束了第五屆省賽。
        回來以後,心情很沮喪,老師說了很多安慰我們的話,但這次比賽的結果實在是令自己,令老師們失望。幾天以後,實驗室舉辦了“我想要那塊牌”活動,每個人都說了自己的想法,感到精神上受到了鼓舞,也覺得自己是那麼幸運能夠加入學院集訓隊,認識那麼好的老師和同學,在這裡,我真的感到很開心,喜歡融洽的氛圍,喜歡一起努力的感覺。後來,實驗室做了調整,學長學姐們和幾位大三的隊友離開了實驗室,我,ZS,YYM,XH選擇了留下,準備再戰一年。
       14年的暑假,我們留在學校集訓,那段時間過得很充實,也訓練了不少題目。大三上學期開始後,首先迎來的是五場區域賽網路資格賽,題目很難,結果是一場比賽也沒有得到出線資格。上學期,我的打算是一心學習演算法,保持ACM的訓練,然而現實卻總不是那麼一帆風順。大三也快就業了,身邊的同學都搞起了技術方面的東西,做東西,這是很大的一個誘惑,覺得他們都很厲害,能做出那麼好的東西,而自己卻什麼技術也沒學。有一段時間我也開始懷疑自己的決定是不是正確,後來和北航的一位學長聊天,跟他說我的疑惑,他說他也曾經過這樣的階段,聊了很多,最後我沒有改變繼續搞ACM的決心,繼續堅持下去。快到了年底,有一件意想不到的大事發生了。現階段實驗室大三的有我們四個,怎麼組隊是個問題,有一天老師把我們聚到一塊,商量組隊的問題,而問題的核心就聚焦在了我們隊的YM是選擇繼續和我,ZS組隊,還是選擇和XH組隊,當時氣氛很沉重,也看得出YM很糾結,我的想法是不分開,畢竟隊伍也建立了一年多,也共同經歷了很多事,明年還要一塊去“雪恥”。不過,後來YM還是選擇了分開……開完會後心裡很不是滋味,和隊友ZS聊了很多,ZS的想法是分不分都可以,關鍵是該開始系統的訓練了,要不然,明年還是沒戲。後來我也想開了,無論怎樣,終不能忘了前進的腳步。幾天之後,大二的萬延鵬(WYP)加入了我們的隊伍。眼看著就到了寒假,不能留校訓練,老師讓我們每隊制定出自己的訓練計劃,我和ZS,WYP商量該怎麼訓練,糾結之處是是否把專題分開分給每一個人,其實這也是一直以來實驗室訓練的一個問題。後來也請教了網上的大牛,建議我們還是每個人每個方面都過一遍基礎,然後個人有針對性得側重一些專題。就這樣,我們制定了整個寒假的訓練計劃,前期出的專題都做,後期就按照虛擬OJ上大牛出的專題個人挑著專題做,儘量每個人都做一遍。事實證明,前期的效果不理想,而後期的效果則很明顯,做一個專題就要做大量的習題,一定要搞懂,學會靈活運用,在做了近20道線段樹題目後,自己終於感受到了線段樹的強大之處,也明白了該怎樣去運用線段樹,其中最直觀的一個體現就是敲線段樹的題目再也不需要模板了,直接按照思路敲程式碼,後來找到14年省賽拿到線段樹的題目,當時沒敢敲,這次終於把那道題很做出來了,能感覺到自己真的進步了。平常有比賽,我們三個就在群裡交流一塊做題,最晚的是Codeforces,熬到兩三點……一個寒假之後,覺得收穫了特別多。
        到了大三下學期,距離省賽還有兩個月。我們陸續把上一屆省賽的題目能做的都做出來了,發現我們當時的知識面實在是太少了,不懂概率DP,不懂高斯消元,不會靈活運用線段樹等等……大三這一年,是我ACM知識收穫最多的一年。15年第六屆ACM程式設計競賽報名,Alice隊誕生了!隊名是ZS起的,中文名愛麗絲聽著有點像女隊…不過也無所謂了。臨近省賽的那段時間,我們實驗室進行了很多場比賽,我們隊配合的還不錯,成績也比較理想,WYP雖然是大二的,但思路敏捷,很聰明。然而省賽前的最後兩場模擬賽,我們隊卻發揮的一場比一場差,第二場竟然排在了倒數。原本的自信就被削去了一半,最後一場賽後我很鬱悶,感覺老天像在開玩笑似的,自己一個人到海邊呆了很久。後來ZS跟我說,你這隊長,得帶起氣氛來啊!說實話,我真的不是那種容易帶動氣氛,很快就能打雞血的人。我問他現在什麼感受,他說無所謂,結果真的不在乎了,之前經歷了那麼失敗,已經沒有什麼大不了的了。我很佩服他,覺得很有道理,之前失敗了那麼多,這一次就不要再擔心失敗了,還不如調整好自己的心態,正常發揮,結果就隨它去吧。老師一直給我們大三的強調心態問題,我也清楚,心態決定成敗,幾天後的省賽,拼的就是心態問題。
        2015年5月9日,我們一大早來到了學校大門和老師會和,望著不遠處的大海,感到整個人很開闊,也不知道明天會是怎麼樣的一個結果,再回到這裡時會有怎樣的心情。中午,我們隊伍到達了青島的山東科技大學。下午兩個小時的熱身賽,看到了一個“貌似”很簡單的題目,就是求1+2+….+N的和,看了資料範圍用了long long,交了一發,最不想看到的事情還是發生了,返回了一個WA(賽前我們就說,第一題一定要謹慎,否則第一發返回個WA太打擊人了)。後來改成了判斷N的奇偶再用公式,心想這下沒問題了吧,提交,又返回一個WA,天哪,怎麼回事……後來又把long long 改成了unsigned long long,交了以後終於AC了,資料範圍一定要注意。接下來WYP做那個規律題,記錄1出現的位置,寫完以後交了,返回YES,漂亮!接下來ZS做拿到母函式的題目,有些卡題了,看得出ZS也有些緊張,一個勁兒的喝水,後來敲完了,交了一發,返回YES,哇的一聲叫了起來!出了三題,看了看榜,排在銀牌區。接下來兩道題目都是模擬,我們就沒有再做,而是熟悉下比賽環境,試了試JAVA。晚上和山東科技大學的老同學吃了頓飯,回到酒店的時候快8點了。我把我們隊聚在一塊,共同商量明天的對策。總結出了幾點:1.前期就做水題,不要去做那些難題,緊跟著榜走。2.一個題目儘量兩個人一起來做,第一個題一定要兩個人。(這一條在現場賽時起了很大的作用)3.不能急躁,不能說垂頭喪氣的話,感到心煩意亂就去外面走走,不要影響整個隊伍(這條也很重要)。4.加油。那天晚上,我大概快12點的時候睡著的,對於明天的比賽,不是忐忑,而是滿滿的期待。
        第二天正式賽開始了!開始前電腦設了密碼進不去,沒辦法先敲標頭檔案,等到發下試題後,還在等著怎麼還不公佈開機密碼,WYP提醒我說別的隊都開始敲程式碼了,怎麼回事,開機密碼在哪?突然看到了檔案袋裡面的紙條上有開機密碼……看題還是按照慣例來看。我先負責敲標頭檔案,敲標頭檔案的時候WYP告訴我說,A可以敲,但有個問題,先想想,等我敲完標頭檔案,這時候看了看榜,A已經有人過了,於是WYP去敲A,我快速看了看題意,是個簡單題,按給出的身高排序就可以了,然後我看WYP敲A題,問他問題在哪,他說如果身高相同怎麼辦,是啊,題目沒說,我說應該沒有相同的吧,題目也沒說,就按不同來排序就行。他敲程式碼,我在旁邊輔助,敲完以後,測試資料過了,就交了至關重要的第一發,三個人充滿期待的盯著電腦螢幕看著返回結果,YES,返回了YES!13分鐘1Y。然後我們看榜,有人出了C題,我看完題意以後,博弈題,好像是白皮書上的原題……不過也不敢十分的肯定,看到榜上有人5分鐘就過了,程式碼肯定很短。於是我跟ZS弄這個題,WYP去看其他題目,想了好久,還是沒很確定的想法,ZS說先用暴力打表試試,於是他去敲,不過後來打表的結果無論什麼情況都是先手勝,不對啊,可以舉出反例,列印程式碼,看哪裡打錯了。然後看到了H題,給出一些數,問有多少對數(ai,aj)滿足ai*aj是個平方數,這個題一開始沒思路,ZS來想這題。又看了看榜,發現B題由三四個隊過了,我看了看題意,題意很簡單,就是對一件商品,每個人都有一個競價,有三種操作,給出競價x,撤銷以前的競價x,詢問當前的最小唯一競價,比如競價有 2 2 4 5,那麼最小唯一競價就是4. 覺得這題不難,我就開始跟WYP說題意和我的想法,用map記錄某個競價出現的次數,把那些競價唯一的價格丟到set裡面去,set很適合本題,裡面的數都是獨一無二的,而且是預設從小到大排好序的,所以輸出最小的唯一競價,如果set非空的話,那麼答案肯定是第一個,WYP肯定了我的思路,於是我就去敲程式碼,WYP在旁邊看著我敲,給我指出哪裡需要注意,他真的很聰明,想到了好多點,我們配合挺默契,很快就敲完了,測試了用例也能過,於是就交了,返回YES!54分鐘1Y。後來我看了看J題,大數問題,就是問兩個大數是否一樣並且一個大數能不能被11整除。我立刻給WYP說了題意,然後確定了想法是對的,我就去找大數的模板,前兩天剛在網上找到了一個大數四則運算簡易高效模板,不過我只用過加減,還沒有用過除法,模板的除法引數是大數字符串,以及int型別的除數,返回的是餘數,正好能完美運用到本題,希望這個模板沒有錯誤吧,於是我就小心得敲模板,敲主函式的時候,WYP還是在旁邊看著並提醒需要注意的地方,敲完後測試資料也過了,又測試了其他幾組資料,也能過,然後就交了,返回YES!漂亮!69分鐘1Y。比賽進行一個多小時了,榜上C題過了一大片,後來我說,C題應該是個原題,見過,而且那麼快有人過肯定程式碼很短,我記得n>=3的時候就是輸出後手勝,考慮對稱,要不試一試吧。於是我們就賭了一把,只判斷n是否大於等於3,然後交了,等待結果,YES!77分鐘1Y。我們都叫了起來,WYP說這人品也太好了吧。就這樣20多分鐘,我們連過了三題!這時候我們看了看榜,進到了金牌區,真的很高興,我提醒說大家冷靜下,還有別的題目。後來看到了L題,讀完第一遍感覺就是先強連通分量縮點然後最短路,WYP也看了本題確定了本題就是個模板題,先縮點,然後DFS一下,不用最短路,因為縮點以後就成了樹了,也是,於是WYP就去敲L題。這時候ZS還在搞H那個平方數的題,ZS圖論不錯,我給ZS說了題意,然後他去輔助WYP搞L題。這種模板題只要思路正確A掉應該沒問題的。這道題用了比較長的時間,中間還有一次把模板敲錯了,最後敲完了測試資料也正確,於是就交了,返回YES!132分鐘1Y。漂亮,我對WYP說,厲害啊!這時候看了看榜,還是在金牌區,我們三個都很高興,沒想到這次配合的這麼好,五個題全部都是1Y。比賽還剩下兩個小時多一點,看了看別的題,各種沒思路,不會……..這時候H題過的人還是挺多的,我們就把希望放在了H題,ZS有了新思路,用質因數做雜湊,可以降低複雜度,於是去敲,在距離比賽還剩一個多小時的時候,H題測試資料過了,於是就交了一發,返回TLE……天哪…這時候,我們排名從金牌區也滑到了銀牌第二名。和隊友說,銀牌我們應該是保住了,但能不能更好一點。這時候坐在我們前面的三個隊伍都過了6題,我們5題緊跟在他們後面,如果再過一題的話,因為全是1Y,時間有優勢,應該能擠進金牌區。於是ZS繼續改H題(期間WYP試交了幾發K題),他說還可以再優化一下,用兩個質因數時間可以減小一半,我對他說,還有一個小時的優化時間。不過ZS神優化,十幾分鍾就優化好了,測試資料也能過,提交,返回YES!ZS哇的一聲快把我嚇死了,不過我也哇了一聲!太厲害了,258分鐘2Y。我打趣說到列印的那張“佛祖保佑 永無BUG”果然管用,ZS激動的拿起那張紙親了一口!這時候已經封榜了,不久聽到前面隊一聲歡呼,他們又過了一題,7題了…右前方的那一隊也早過了第7題…我們隊得金牌的機率又小了……這時候ZS做了一個偉大的決定,做G題,因為G題題意和H題只有一個地方不一樣,H題是平方數,G題是立方數,按照他的程式碼,再改一改,有可能過。於是我們又把希望放到了G題上,ZS如有神助,不到20分鐘就改好了,然後驚喜的發現測試資料也能過,交!還是不交!交!交了一發,判題機始終不返回結果,我們三個就睜大眼睛,充滿渴望的盯著螢幕,然後我把打印出來的“佛祖保佑”拿到電腦螢幕上,我們三個就在那拜啊拜,拜啊拜。還沒有返回結果,ZS說受不了了就去外面上廁所,突然他又回來了,而且手裡還拿著一個氣球,我問這是誰的,他說A39是咱們隊把,志願者給的,我說咱們那道題還沒有返回結果啊,不會是弄錯了吧,要不給他們送回去,問問清楚,拿著別人的氣球也不好。ZS又拿著氣球給志願者送去了,過了一會,又拿著氣球回來了,說就是A39啊,WYP發現氣球的顏色正好是剛才交的那道題的氣球顏色,不會是過了吧!!!ZS就把氣球插到了我們隊的牌子上,突然,電腦螢幕上彈出一個框,顯示了大大的YES!!!天啊,太不可思議了,我們都激動的叫了起來,那種感覺真的是太不可思議了,這就是ACM比賽的魅力,總有那麼多的期待和驚喜等待著我們!280分鐘1Y!這下進金牌區的可能性大了很多,同時7道題,我們時間上應該佔優勢。當時,我們三個真的是太高興了,我都差點給ZS跪了,膜拜!發現老師在窗外,向我們投來讚許的目光。很想哭的感覺,感覺心裡有一塊空洞的地方終於被補上了!就這樣,比賽結束了。
        搞了兩年多的ACM,經歷了去年的失敗,今年終於得到了回報,給自己,也給老師交了一份滿意的答卷,沒有讓老師們失望。接下來就是等待結果……很興奮,到底能不能拿金牌。之前我們商量的是保銅奪銀,從沒有想過能拿金牌。終於等到了頒獎儀式,流程是先一一揭曉封榜後每個隊提交題的是否通過情況,從低到高開始看。過程有些慢,我們學校有三個隊拿到了銅牌,接著是銀牌區,我們排在第二位,隨著下面封榜後提交題目是否通過的揭曉,我們從銀牌開始向下滑,不過下滑的幅度不大,銀牌應該能保住,到了我們隊的時候,揭曉H題,通過!然後我們就到了金牌區的倒數第四名,然後繼續揭曉,下面的隊也擠到了金牌區,我們到了倒數第三,心裡很緊張,然後成了倒數第二,當銀牌第一的揭曉的時候,我終於鬆了口氣,是金牌!!真的是金牌!!真的太高興了,能拿到金牌真的沒有想到!頒獎的時候,終於站到了領獎臺上,拿著手中沉甸甸的金獎牌,看著臺下的兩位老師,有說不出的感動。頒獎儀式後,把獎牌交給隊友,一起分享著勝利的果實,我們誰也沒有料到。然後我給媽媽打了電話,去年今天也是母親節,當時說的是失敗,而今年今天也正好是母親節,我要把成功與媽媽分享!這也是送給她的母親節最好的禮物!
        山東省第六屆ACM程式設計競賽結束了,我們學校取得了一金三銅的歷史最好成績!
        搞ACM的這兩年中,經歷了太多太多,也收穫了太多太多,有過淚,有過笑,有想過退縮但始終沒有放棄,有過失敗,有過成功,我懂得了重要的不是結果,而最精彩的是過程。在這個過程中,要感謝太多人,感謝盧老師為我們創造一個實驗室大家庭的環境,在實驗室的時光,是大學生活中最美好的回憶,感謝周老師對我的寬容,當我有次犯了很嚴重的錯誤時沒有批評,反而是安慰和理解,我永遠都不會忘記,感謝封老師對我們的思想指導,把一切都為我們準備的那麼全面與周到,處處為我們著想,還記得您在我們去年省賽失敗後說過的話,謝謝您!感謝學長學姐們對我們的幫助,為我們創造ACM實驗室堅持,努力,不放棄的精神!感謝ACM集訓隊的所有隊員,很高興認識你們,喜歡大家一起並肩作戰的感覺,有兄弟,不孤單!還有我的隊友,YYM,你是一個做事極其認真的人,一定可以達到自己的目標,ZS,你是個有理想有抱負的人,很多方面我都很欽佩,在考研路上再一起加油,一定能考上理想的學校。WYP,你真的很聰明,一定要堅持下去,明年等你們的好訊息。
        值得慶幸的是我在ACM這條路上沒有留下遺憾,雖然有過失敗,但這個過程中我收穫了太多太多。過幾天就要離開實驗室了,在那裡呆了兩年多,真是捨不得。但是我也要向著新的目標前進了,考研!一步一個腳印,加油!實驗室集訓隊的學弟學妹們,你們也要加油,明年就看你們的了!