1. 程式人生 > >2016亞洲區域賽(大連站) 總結[需要更加努力~]

2016亞洲區域賽(大連站) 總結[需要更加努力~]

2016亞洲區域賽 大連站總結

ACM第一塊銀牌,一個良好的開端! 

  週五下午就匆匆忙忙的趕去大連,路途很長,先趕到了煙臺,在從煙臺做的輪船到了大連,一路上雖然很累,但都在聊各種話題,還是比較開心愉快的。

  先說些題外話,到了大連才4:30,大清早的就趕去大連海事大學,可是早餐都不開門,只能六個人在超市裡吃泡麵(現在想想還是很搞笑= =),然後一上午等著報道,吃午餐,中午沒有睡覺1點左右就去看開幕式,打熱身賽了!

  先說說熱身賽吧:

  熱身賽總共五個題目,我們拿到手後,我從前面開始讀題,ZS從中間讀,WJH在後面讀,我先讀出了B題,B題應該算是一個幾何題目,但是由於我的問題,一個暗含條件沒有讀出來(題目中說的正方形是可以傾斜的,而我理解成了只能是水平的),導致給ZS限制思考的空間,他想到了二維樹狀陣列,由於這種型別的他寫的少,導致題目是邊寫邊思考,而且思考很久,然後WJH讀出了E題,E題是劉汝佳演算法競賽入門經典 的一道原題(例題6-22 UVa 11853 戰場),考察dfs,這個題目我們兩個人都做過,但是由於時間太久了(而且還沒帶紫書,由於是熱身賽,我就只帶了鄺斌的模板書),我們也有所忘記,我們只能在現場去推到解法。推了大約十分鐘ZS還在想二維樹狀陣列(其實方向就錯了),但是我們推出瞭解法,也驗證了想法的正確性(其實我們想的解法和正解還是有些出入),我就上手去敲,大約有20分鐘,我們寫完了,但是可能想法還是不夠好,我們一直TLE,然後就嘗試剪枝,這就導致了剪枝過頭還是沒過頭的問題,就一直在WA和TLE之間徘徊,ZS最後雖然寫好了二維樹狀陣列,但是題目理解有問題,也是一直WA,由於只有兩個小時的時間,我們也只能研究這兩個題目了,最後我們也一直沒過。

  這次的熱身賽打禿了,原因有很多:

  先說說外部因素吧,那一天,我們狀態實在是不好,我們從4:30開始下船,早上加一上午都在奔波,領完比賽服回到賓館換了衣服就12:40了,開幕式在1:00,我們只能匆匆忙忙去看開幕式,在現場開幕式,我們三個人都趴在了電腦桌上睡著了(實在是累!)

  其實感覺最大原因還是在於自身:首先我就有很大的責任,給隊友讀出了一個錯誤的題目,方向錯了,努力都白搭了,其次自己的學習過程太浮躁了,我們的學習過程基本上就是學習紫書嘛,但是那個題目做過去了,自己一點印象都沒有,推了很久推出了一個還是有很大出入的解法,說明題目的思想還是沒把握住。在搜尋方面還需要勤加練習,其實這一點在比賽前一兩週就已經在積極改正了,改正方法就是多多看做過的題,不看題解一點一點的在做一遍。這個題目給我最大教訓就是書要一點一點的學,而不是找水題去做!!!!!

  由於熱身賽的原因,我的心情很是不好,好在隊友們都還是比較開心的狀態,還好沒有被我的消極狀態所影響,我們打完熱身賽吃完晚餐,我們就出去玩了(現在想想真是一個明智的決定),我們來到了星海廣場,我們玩了很多,完全把熱身賽消極心情拋在了腦後,回到旅館後,我們洗刷後躺在床上了,又聊了很多,就這樣勞累的一天過去了!

  第二天正式賽,我們來到現場,精神飽滿,對比賽充滿了自信,等待著考驗!

  我還是一如既往的在前面讀題,ZS在中間讀題,WJH在後面讀題,讀題真的和狀態有很大關係,我很快正確讀出了ACD三個題目,但是我沒有立即和它們討論,因為這些題目,算是所有題目中比較長的了,WJH 告訴ZS讀J題,J是一個簽到題,很快寫完了,又讀到了I題,I題稍加分析後 也是一個簽到題目,這樣我們20分鐘內兩發1Y,打了個很順利的開場!

  這時候第一名開了H題,但是也有人開了D題,開D題的人,是我們的兄弟隊,D題是一個數學題,我們想應該不是很難推,但是我們一時還沒有想好,我們就選擇了研究H題,H題我們沒有找到合適的規律,最後我們暴力過了H題,在去研究D題,D題ZS給出了一個猜想,並且樣例適合這個猜想,我們就大膽去寫了,事實上那就是一個正確的猜想,很快的出掉了D題,現在就四發1Y了,ZS從頭到尾一直對A題的題意不能理解,我只好和WJH研究A題,因為我感覺題意說的很明白,所以說我覺得A題不是一個難題,A是一個二分圖染色,判斷是否衝突,我想用並查集 + bfs去做,但是WJH想法直接bfs了,而且討論的也很清晰,我們就採用了直接bfs的方法,敲了10多分鐘又一次1Y,說實話這個題目確實讓人產生歧義的感覺,因為我們對面的隊伍很厲害,他們到最後都在抱怨A題說的無法讓人理解,但是我們把題意弄的很清楚,那些歧義我們想的也很清楚!所以說算是比較幸運的了!這樣我們就五發1Y了,第六個題目F題是銅牌題目,但是我沒有讀這個題目,ZS想了想覺得並不難,就自己寫了,然後這個題目有一個坎,那就是需要乘法逆元,這個題目需要除法的取模,只能用逆元了,我們清楚,如果mod不是素數的話,求逆元會比較麻煩點,我雖然做過不是素數的逆元求法,但早已經忘記了,但真的很幸運,這個題目的mod是素數,如果是素數的話,那就簡單多了!(A/n) % mod = A % mod * quick_mod(n,mod-2,mod);只用到快速冪即可了!通過這個銅牌題,給了我很大的感觸,那就是分工合作太重要了!這樣我們又1Y了一次,我們的兄弟隊就是因為沒有接觸乘法逆元,而是採用其他的方式代替它,一直TLE,無緣銅牌!真的感覺很幸運! 最後一個題目是G題,銀牌題目! 是一個樹形狀態壓縮dp,ZS也算是比較擅長狀壓DP了,但是ZS想的dp 一直不敢寫,它計算的複雜度是50000 * 128 * 128,題目給出的限制是5S,極其容易超時,這樣一直想了比較長的時間,因為狀壓dp在樹上進行的,他的做法是找到一個節點,列舉經過這個點的一個狀態s1,和另一個狀態s2,如果它們合起來是滿的話(1 << k)說明可以從一邊走向另一邊這樣在進行轉檯轉移,我就想到了一個小小的優化:先預處理所有128種狀態,用鄰接矩陣就像建圖一樣,給狀態進行建圖,雖然算不出具體複雜度來,但時間上的優化肯定是有的!這樣他又寫了比較長的時間,在比賽結束20多分鐘時,又一次1Y了這道題目,A了之後我們又測試不加優化的程式碼,也過了,說明了資料的極限資料不夠強。這樣正式賽以7個1Y結束了!獲得了銀牌!

  總結:

  這次能獲得銀牌,有很多方面的因素:

  先說說外部因素:我們這次精神狀態確實很不錯,來到賽場都是精神飽滿!

  內部因素呢,ZS發揮超常,寫的程式碼都是1Y,想到的思路也很對!我讀到的題目,沒有在像熱身賽一樣讀錯題目,也碰巧碰到了之前瞭解過的乘法逆元,WJH對題目的把握也很到位,思維也比較靈活,A題很快的1Y掉!

當然也還有很多教訓:

  紫書上的題目,還需要在細細體會,必要的時候在做一遍,學習紫書要慢慢來!

  我們以後訓練的也要多加練習,爭取都要接觸都要學習,多方面學習!路還很長,需要慢慢的走!