1. 程式人生 > >2017ICPC/ACM亞洲賽區西安站現場賽 總結

2017ICPC/ACM亞洲賽區西安站現場賽 總結

2017.10.27早上9點半從學校出發去威海北,然後大概四小時到了濟南轉車,硬臥濟南到西安,時間剛剛好,大家也比較輕鬆,我們2個隊6個人剛好包了硬臥的一整個小包廂。晚上說說笑笑,談談學習、保研的事情,火車上沒什麼網,差不多十一點就睡了,第二天早上大概7點半,就到西安了。

出了西安火車站,去路對面的吃了個早飯。然後準備按計劃做公交的時候,發現今天是西安國際馬拉松比賽,市區道路交通管制,臨時改變計劃線路,下車的時候,zh小姐姐的手機就被偷了……emmmmm,誰都沒有知覺,都沒發覺,然後就這樣了。然後我們坐地鐵,一號線轉2號線,避開交通管制的道路,然後坐公交,再轉公交,坐了起碼2小時,公交上還擠滿了人。去西工大長安校區之前,我西工大的學長給我說長安校區在山裡,是鄉下,我還說能有多偏僻,因為一般大學離市區的確都很遠。mmp沒想到離市區整整2個半小時的路程,還真的是在一個村子裡,真的是荒無人煙,空氣清新,果然是一個學習的好地方。到的時候大概已經是下午12:30了,然後簽到領隊服,掐這個點吃了西工大食堂的午飯(我覺得還不錯),採購一波,調整一會,14點就去開幕式了。開幕式也沒什麼,本以為會有一波吹逼,結果就講了十幾分鍾,就結束了。然後就進體育館了,準備熱身賽,然而14:30到的體育館,15:30才開題。吐槽西工大每次比賽前都先進行安全演習,果然宗旨是安全第一比賽第二。因為打過省賽,電腦環境linux也都熟悉,開始熱身賽後,我先看了B,字元模擬加減法,無比麻煩,然後jzh和zsx看了C題。在看C題期間我看了A題,發現一頁多都是介紹西工大的歷史,就最後一段有用,就是一個簡單的快速冪,底數1938,讓zsx敲了一發,wa了。仔細一看,底數是文章中隨機的一個數字,zsx問我西工大什麼時候建校,我說1938年,然後他說那肯定是2017,再一看有這個數字,一交,AC了,(吹一波)那瞬間53名。然後他們C題看完了,有區間求和,就用了樹狀陣列,交了TLE。然後想了一會,也不知道怎麼優化,就放了C題去動超麻煩的B。還是zsx敲的程式碼,敲敲敲,思路很簡單,也做過類似的題,但是還是打常量矩陣那邊卡主了。大概還剩30多分鐘,敲出來了,過了樣例,交了一發,WA了。懵逼,然後以為是空行的問題,改了格式又交了,還是WA,不知道怎麼辦。還剩3分鐘的時候,我突然問zsx,當0-0的時候怎麼樣,結果發現沒輸出,就是錯在相減為0的情況下面沒有輸出WA了,然後時間也來不及了,zsx直接加了特判,還是十幾秒的時候交了,比賽結束後AC了。之後查程式碼才發現ans=0的時候根本不進判斷裡,所以沒有輸出。出來後祥神他們一總結,C題線段樹和樹狀陣列都過不了,也不知道為什麼,然後我問我浙師大的同學,他們過了C沒過B,跟我說,暴力2層for就過了(mmp)……然後在西工大食堂吃了晚飯,等擺渡車,去了賓館了,辦理手續,進房間快8點了,然後RNG也涼了,洗了個澡,21點多就睡覺了。(賓館條件比較差)

29號早上6點多起來,洗澡吃早飯,大概7點半的時候坐上了擺渡車去西工大,大概8點到的,然後等了大概30多分鐘,進了賽場。比賽前,西工大果然又進行了安全疏散的演示。因為先進了系統,可以偷偷看到題目名字,發現B和K是有相關的題,zsx斷言其中必有一個題簡單,後來準時開題,先看了B題,樸素地數字匹配問題,2個排序然後從頭到尾掃一遍即可,我敲的程式碼,wa了一發後zsx查了個bug之後ac了,大概是30分鐘左右,不快不慢。然後jzh小姐姐就去看相關的K題了,我們看了一下榜,很多過了F題,zsx就去看F了,然後我也看了F,還看了A\G\H\J題,就是簡單地對題目有個大概的瞭解,在看題期間jzh敲了K,但是TLE了。沒辦法,這期間對面的計蒜客打星隊已經A了BFG了,而且周圍的隊基本上都過了F,我只能硬著頭皮回去看著到概率的F題了。三個人演算這個題算了半天,基本卡在概率的迴圈上了,不知道怎麼處理,然後zsx找到了幾個沒迴圈的,得出了n/(n+m)的規律,然後沒別的法子了,交了,竟然AC了,這時候已經時間過半了,大概已經200多名了。然後對面的計蒜客已經過了ABFGH了,而且FGH過的間隔都非常小,我就去看G了,jzh和zsx去看了H。然後G這個異或的問題,我存了字首然後求了組合,樣例過了後交TLE,實在想不出能優化的地方了,而zsx和jzh覺得H是個線段樹,然後zsx就開始敲線段樹了,這時候大概只剩一個半小時了。敲了線段樹之後發現板子好像不對,單點修改後更新不對,而且思路也不是清晰,然後我的想法最好也是有線段樹來求區間最小值,但是線段樹真沒法子了,我就說這題我來,你們兩去看看我的G題。然後我寫了一個二分求區間最小值,從左往右求k區間的最小值然後減掉,然後樸素爆搜了一發,TLE了,然後想辦法優化,跳過最小值為0的點,然後wa了。我以為是我在跳的時候又錯了,又進行了優化,還是wa。最後zsx說要不試試long long ,我說行,試了一下,AC了,這是封榜後20分鐘了。封榜時3題已經220多名,拿牌必須再A一題。看了榜之後覺得J題有戲,zsx就開了,但是優化有難度,直到最後還是沒能a題。結束時就知道基本拿鐵了,因為FH出的太慢了,一首涼涼送給大家。

最終的確沒拿牌,時間排名不夠。總結原因一個是比賽前學生工作佔去了一部分訓練的時間,程式碼手感一般;二是有思路的情況下會往板子上靠,總喜歡用板子來搞,但是其實很多題目是不需要板子就可以打,不夠靈活;三是隊裡頭沒有專攻數學題的存在,這種有時候不需要演算法和資料結構的題,要是有一個數學大神就很輕鬆,也會節省不少的時間;四是思維僵化,學了什麼就想用什麼,但是其實題目都很靈活,很多都不是由一個具體的資料結構能解決的,就如H的,簡單的二分思想也能過,對待題目要靈活;五是這樣的時間安排的確有點趕,而且我們全程帶著行李箱,有點累。

我覺得之後我們的隊伍組成可以讓zsx做主coder,然後我做統籌開題還有debug,jzh小姐姐來出思路,最好每個人都要有單挑的實力。之後的日子裡我可能要加強一下隊內的訓練,為明年省賽做好準備,爭取明年的區域賽拿塊牌子。