2017湖南省第十三屆ACM省賽總結
2017年9月2日,我,濤哥,學弟張燦,組隊參加了2017年的湖南省賽,這裡寫個總結,作為以後參賽的經驗。
經過浙江中醫藥大學的羅傑老師指導,比賽前我們三人做了這樣的分工,濤哥經驗豐富,實力最強,作為隊長;我的話實力很一般,好在程式設計基礎較為紮實,心態穩定,願意做苦力,作為本隊的主鍵盤手,負責模擬和簡單題;而張燦知識面廣,模板熟悉,主要負責圖論題。當然,題目並不是按照我們預想的套路出的,所以在比賽過程中,也並非按照分工來做。
比賽開始後,也是按照羅傑老師所說,一人前,一人後,一人中間開始看題,我是中間,學弟看到A題比較簡單,就先敲了A題,A題是這樣的:給出n,d,要求安放1~n所有的數字在一條直線上,相鄰的數字的差的絕對值都必須要大於d,(n<=100)學弟寫的是一個簡單DFS,當時寫完,還只有幾個隊交,沒有出AC的,當時可能想著拼一槍,萬一得了1A就大賺,但是後面看來那個DFS明顯是超時的,大概n大概到20左右的時候就炸了。於是我們接著看其他題目,等待ranklist給出能做的題,大概看完一遍,沒有發現特別水的題目,(其實B題應該是本場最水的,可能是由於題目太長沒有細看吧),接著我發現了一道K題貌似可以一做,題意是這樣的:n個隊伍來比賽,贏一場+3分,平+1分,負0分,給出每個隊伍的分數,問最多和最少的比賽場次,和濤哥說明題意後,他就在思考這道題了,這是大概是比賽開始40分鐘左右的時候,坐在我們對面的隊伍已經拿到了A題的氣球,看榜也是有十來個隊伍A了A題,於是我和學弟又轉而去思考A題,試著找了幾種規律,按貪心的思想也試了試,但是都被我們找出反例。接著就是給濤哥敲K題,在一個多小時的時候,一個機房的隊伍已經有四五個隊拿到氣球了,當時確實是有點慌,怕自己一道題也做不出來,這時候再看了看榜,A題已經出了一大片,B題也出了很多,於是我就轉去看B,題意是這樣:Alice和Bob玩21點遊戲,Bob做莊,Alice有超能力能看到上面的n張牌,遊戲開始時各發兩張,然後Bob問Alice還要不要牌,這個玩過21點的應該都知道規則,題目問Alice是否能一定勝利,看完我就知道這就是真的水題,跟學弟說了一遍題目就馬上開始敲了,當時已經大概是一個半小時了,我們還沒有拿到AC,敲完之後,思路很亂,我自己都看不懂,這時候學弟在我旁邊提醒我,思路太亂,這時候我也意識到自己是真的急了,想快點出第一個AC,濤哥這時還在想K題,取得了一些進展,我和濤哥在交換鍵盤敲。我告訴自己不要急,把思路理清了一遍,把B題原來的程式碼刪了重來,其實這道題的思路真的很簡單,在4~n每個地方打個斷點,代表Alice只抽到這張牌為止,Bob則用剩餘的牌得到一個不炸的最大值,過程中如果出現一次Alice的點數大於Bob的點數,那麼Alice就一定能取勝,敲完不到10分鐘,樣例一過,交上去。。。。WA。。。。也不知道為什麼,心態沒受影響,或許是知道自己的思路一定是沒問題的。立馬檢查了一下,發現迴圈從5~n開始的話就意味著Alice一定會抽第一張,但是她不要第一張也是可以的,於是改成了4~n,徵求了濤哥的同意,馬上就交了第二次,心中祈禱著一定要過,不要辜負隊友的信任啊,交上去非常快就出了令人激動的綠色Accept,心情大振,雖然我們三個都表現的比較淡定,但是我知道大家都應該鬆了一口氣吧。這時已經是一小時五十分鐘了,看了下榜,二隊過的A題,也為他們高興,他們這時候在銀牌區,而我們在銅牌區。看到二隊過了A題,我覺得我們也能做的出來,於是我們三人一起來做A,經過各種無奈的討論,總結出了一個規律,對於每個n,如果輸出序列滿足每個相鄰的數大於d,那麼d-1,d-2…肯定也能滿足,那麼也就以為著,對於每個n,我們只用找到那個最大的有解的d,然後對於所有不大於d的都輸出d的解就行了,(題目要求無解的輸出-1)。分析到這一步,我們需要解決兩個問題,第一:對於每個n,最大的有解的d怎麼求,第二:就算找出了最大的有解的d,怎麼找出一組解。接著,用學弟DFS的程式碼試了很多case,但是都沒有發現規律,然後我寫了一個更蠢的全排列演算法,經過多番嘗試,總算是找到了規律!學弟寫完交上去,AC!這時再看榜,我們和二隊的排名變化不大,這時候AC兩題的隊伍從跨越金牌到銅牌,不過我們在銅牌區的排名還是比較靠前的,也知道這次拿銅是穩了,接下來就是爭取再拼一道題了,此時其他題目AC數量還沒有超過10的,大概看了一下榜,也就I和K可以做一下,I題的意思:n個城市,有s個城市有維修點,各個城市間有m條邊相連,詢問q次,問離某個城市最近的維修點是哪個城市,如果有多個答案則都輸出。後面的事就不細說了,因為到最後也沒A出其他題,大概不是我們這個level能做的吧。
總結:這次比賽有幾個關鍵點,第一個是沒有發現B這道水題,羅傑老師在賽後也跟我們說如果我們先做B,是應該可以拿銀的。第二個是在開局不利的情況下,穩住心態把B題做出來(學弟的幫助應該是很大的),錯誤次數也不算太多,我感覺如果這道題也一直沒能過的話心態是會崩的。第三個是對A題,明顯超時的解法沒有思考就交上去了,白白浪費了20分鐘。