World Finals 2017爆OJ記
Day-Inf:
去年China-Final一道數據結構題的FB送我進WF。
今年課表意外地滿,好幾天都是早上8點一直上課上到晚上9點,作業也相對較多。敝隊大約每個星期只能訓練一個下午,有時候甚至一整個星期都沒有機會訓練。
除去ICPC Camp,今年大概只組隊訓練了7場,浙江省賽還因為內存原因少過一道動態凸包。直到WF前,我也就是單人刷完了WF2014、WF2015以及絕大部分WF2016,訓練時間實在是不夠。隊友也已經大四,整個學期都很忙,水平肯定有所下降,在WF前一周稍微寫了寫題找找狀態。
Day-1:
一下飛機就發現忘記開通全球漫遊服務,這意味著這一周都要在“無服務”中度過了。
在San Francisco旅遊了一天,傍晚6點回到賓館,因為時差問題非常疲憊,直接睡到第二天。
Day0:
經過多次轉機抵達Rapid City,發現美國插座與中國的差異,意味著接下來一周給電腦充不了電。同時發現這個地方非常寒冷,一邊穿羽絨服一邊吃感冒藥。
酒店內部非常漂亮:
Day1:
旅遊日,早上去了著名的Mount Rushmore National Memorial參觀。
因為時差沒倒過來,中午回到酒店就直接睡下了,一醒來晚上8點鐘,神奇的是在這裏晚上8點鐘太陽依然高照。
睡醒之後掏出電腦切了WF2013的7道簡單題,結果寫個網絡流還被卡了ISAP,感覺過幾天比賽藥丸。
Day2:
開幕式日,在會場娛樂區和qls、tls一起玩遊戲,感受到了qls賣隊友能力有多強。
不得不說外國的天真是藍:
Day3:
這天是熱身賽,進場時被要求穿隊服,於是回酒店折騰了半個小時。明天一定要準備充分才進場,不然肯定來不及。
熱身賽都是以前WF的原題,一副默寫大賽的樣子。隊友測試完環境,測試完Java、Python之後,還有10分鐘的時間,問我要不要接著寫。於是我開始rushWF2015的那道BFS題,寫完編譯都不測,交上去已是最後一分鐘,結果居然AC了。熱身賽就這樣AC了10題,Rank7,感覺正式賽的RP全掉光了。
Day4:
最重要的一天來了。賽前老劉對我們說,來WF主要為了搶FB,而且只看題數不看罰時,於是我們就制定了先搶FB以及瞎提交的戰略。
比賽開始後,我讀了H題,想了大約5分鐘,並不會做。隊友則讀了D題,並將題意告訴我,我感覺是個凸包題,但是仔細一想卻發現好像並沒有這麽簡單,一時半會兒也不會做。就在這時,場內傳來了一陣掌聲,我意識到全場FB已經出現了,於是讓鳥神去跟。鳥神寫完E題,提交上去返回WA。他認為是二分次數過少,於是改成了1000次,仍舊WA。他只好將代碼打印,換南神去跟I題的榜。
因為隊友WA了簽到題,加上搶FB的欲望愈演愈烈,我根本不能靜下心來思考,D和H都毫無思路,甚至讀新題都有點讀不進去。E題代碼送來之後,我幫鳥神看了代碼,發現他的二分上界居然只有區區1e6,仔細一算的確不夠,應該是1e6+1000。為了保險,他改成了1e9,終於在27min時3Y了敝隊這場比賽的第一題。南神I題也寫完了,提交上去得到了AC,給我們帶來了信心。
南神接著跟F題的榜,而我則在D和H之間斟酌。D題$n\leq 500000$,而H題$n\leq 10000$,從常識上來看應該D更加可做。我分析出D題兩個序列都可以貪心處理成單調下降的序列,之後怎麽優化並沒有頭緒。這種題說不定會有決策單調性?如果過了那是血賺(當時這題還沒有人拿到FB),要是不過也不虧。於是我就嘗試著寫了一發利用決策單調性的分治,一遍過樣例,正準備交時,發現已經有人AC了。交上去之後,跑了相當久的時間,但是還是WA了。這也沒什麽,畢竟我只是瞎猜了一個結論。
因為瞎提交戰略,我開始各種亂搞,比如小範圍暴力,大範圍分治之類的,又連著交了兩次,還是WA。因為沒有其他題可寫,於是我開始造數據驗證決策單調性。打表發現隨機數據下,它的確具有決策單調性,寫了暴力對拍幾十組數據也沒有發現問題。這時我就慌了,畢竟這種對拍拍不出的情況從來沒有遇到過。這時南神讀完了K題,想上機打表找找規律,於是我把D題代碼打印,將機位讓給了他。
這時榜上還有A和C題被人AC過,A題是個幾何,於是我們決定先開C。C一副網絡流的既視感,和網絡流隊友一起討論了大約十分鐘之後終於得到了比較靠譜的做法,於是換他上去寫了。131min時,C題1Y,我們的信心回來了一些。
接下來我們討論了A題,感覺枚舉兩個頂點然後貪心延伸並沒有反例,似乎比較可寫,於是準備寫,但是D題一直WA著也不是個事,我就決定先把D處理掉。因為這時感覺FB已經沒法搶了,所以冷靜了下來。經過證明,我發現D題的確是具有決策單調性的,但是不知道為什麽WA了。於是我對著代碼瞎改,比如把不合法的決策的貢獻從0改成負數,然後爆了幾發OJ,依舊是WA。這時南神將K題題意告訴我,是說將$s\leq 100000$個長度不超過$10$的串按在長度為$n\leq 1000000$的隨機串中出現的概率排序。我說這個$n$那麽大一定是沒用的,大概和$1000$取個$\min$然後暴力DP就好了。他覺得很有道理,就上去寫了,卻返回了WA,他認為是他寫錯了,於是打印代碼下來查錯。
這時我突然意識到,如果分治先處理的是不存在合法決策的點,那麽無論它選哪個點作為最優決策,都會破壞左右子區間的決策,這種點應該在一開始就被剔除。聽說WF的評測機一秒能跑2e9,所以在修改之前,我嘗試著交了一發暴力,不料TLE了。於是我重新修改預處理部分的代碼,剔除了非法點,提交上去終於得到了AC。D題在第182分鐘8Y。
這時看看榜,發現A題過了一片,D過的比我預想的少,而且5題甚至位於獎牌區,感覺寫掉A之後再開一兩題並不是難事。於是我信心大增,掏出幾何板子愉快地抄起了A題。在237分鐘時,終於調過了A題的樣例,結果返回了WA。這也正常,幾何題一般都有坑。我隨即手出了一組數據,發現果然錯了,枚舉的線段本身就不在多邊形內的情況會出錯,改完之後仍然WA,也再沒有構出過能讓自己錯的數據。
南神和鳥神重新讀了一遍K題,發現數據範圍讀反了,瞬間不會做。此時榜上還有L題過的比較多,於是他們去搞L了,我接著調A。我對A題做了一些assert,發現詭異地響應了,簡直是不可能事件。在瞎改的過程中,我甚至發現將多邊形翻轉可以多過一些測試點,這就更加不可思議了。最後我索性重寫了A,寫了個$O(n^4)$的暴力,發現也WA了。
已經是最後20分鐘,他們想出了L的一個掃描線+貪心做法,但是不會證,寫也來不及了。於是南神決定找K題的規律,把自己猜到的所有結論都試著提交一遍,沒有一個得到AC。我和鳥神則對著A題代碼檢查,並沒有找出任何錯,一直僵持到最後10分鐘。
這時鳥神突然跳出來說:“你把eps從1e-6到1e-15都枚舉一遍交交看。”我照做了,但是都WA了,每個eps堅持的時間都不太一樣,非常隨機。南神說他又發現了K題的一個新規律,讓我們把機位給他。而鳥神又說:“不如改成1e-3試試看?這發交了就不管了。”於是改成1e-3交了上去,並換南神上K。我們內心都知道,這只是垂死掙紮,也沒想著讓它過了。絕望與遺憾地度過了兩三分鐘,我突然發現剛才那發提交似乎還在Running,它堅持得比以往都要久。我讓南神按住刷新,結果居然刷出來一個綠色的√ Accepted。A題294分鐘34Y,這就叫“無心插柳”麽?我們驚喜地歡呼起來,連觀眾席上的校領導都知道我們過題了。K題就沒有那麽好運了,直到比賽結束依然是WA。
出了賽場問了一圈,得知了qls、tls都沒有過A的噩耗,很多隊伍都坑在了A上。然後又聽說了L題我們那個做法可以AC的噩耗,並沒有時間去寫了。
滾榜的時候親眼目睹了許多強隊的翻車,聽到主持人一句句“They are finished.”時,不免有些憂傷。
我們最後6題,並列第20,雖然因為A題罰時原因墊底了。可以說戰略制定地比較失敗。
World Finals 2017 is finished.
HDU-SupportOrNot has finished.
World Finals 2017爆OJ記