【比賽遊記】2024 ICPC 昆明站遊記

Calculatelove發表於2024-12-02

2024.11.6

FZU 申請到了 2024 ICPC 昆明站的一個額外名額,並分給了我和另外兩位同學。感謝傅老師!感謝實驗室的各位夥伴們!

Day -1

坐飛機飛往雲南,雲層之上的晚霞很美。

晚上九點多,和隊友 vp 了一把 2024 北京市賽(這是我們隊的第一次訓練 ...),由於比較晚了我們打算只打兩小時。

開場先看了 H,很傻很天真地以為深度不減就合法,交上去一發 WA 了。玩了一個樣例,發現並不簡單,至少沒有我想的這麼簡單,遂擱置。

和隊友一起看 K,一個很明顯的貪心思路就是,每次選最小的數 \(\times 2\),直接模擬顯然會超時。很快注意到,若 \(\max{a_i} \leq 2\min{a_i}\)​,則操作順序有很明顯的迴圈節。告訴隊友這個事情並交給他們寫,他們非常穩的實現了這個做法。

接下來雙開 D, H。D 也有一個很明顯的貪心,不過不好支援修改。H 想了一會,想了一個虛樹的做法,不過看起來很難實現,遂擱置。繼續看 D,發現 \(i\) 是否對答案有貢獻只取決於 \(b_i\) 是否在 \(b_{i - 1}, b_{i + 1}\) 構成的路徑上,上機簡單寫了一下就過了。

很快兩小時就到了,除了 H 一發沒罰,挺好的。

Day 0

十點到達 YNU,太美麗了 YNU!綠化做的很好很好。

在簽名牆上留下了我們隊的隊名 fall for a town

簽到後就打算在校園內四處逛逛,看到其他選手騎著電動車暢遊 YNU,我們也打算騎著電動車爽爽。費了好大功夫才成功解鎖一輛電動車。人生中第一次騎電動車,沒想到一上手就知道怎麼騎了,EZ。

YNU 超絕上下坡啊,閉上眼哥們還以為自己在秋名山,騎車的時候滿腦子都是 " 86 上山了 "。繼續騎車逛了很多地方。

十二點半的時候去了食堂吃飯,歇到一點半就出發去場館了。

下午兩點半的熱身賽,拖延到了兩點四十五分開始。

上海站的時候幾乎全程坐在主機位,感到壓力山大。於是這次我把自己換到了三號位上冷靜。

A 就是 A+B problem。B 一看就知道要優先處理 \(w\) 較小的,不過暫時沒想到什麼好的實現方式。與此同時得知隊友 B 做過原題,就讓他來上機寫。

在 00:25:03 的時候順利過掉 B。隊友接著來看 C,得知隊友 C 也做過原題,就讓我上機體驗了一下互動題,在 00:38:02 的時候順利過掉 C。

接下來看 D,一眼不會,我行列式的知識儲備還是很淺的。先讓隊友推了一下 \(n = 3\) 的鏈,得知答案是 \(a_1(a_2 - a_1)(a_3 - a_2)\)。然後將這個式子帶到樣例 \(2\) 發現不太對,說明 \(p_i\) 確實是對答案有影響的。嘗試把這個式子的某個地方改掉,將 \(a_i - a_{i - 1}\) 改成 \(a_i - a_{p_i}\) 試試?發現樣例 \(2\) 對了。於是告訴隊友這個式子並讓他們寫寫試試,發現成功的過掉了樣例 \(3\)! 00:57:40 交上去也是穩穩過掉。

後面一小時玩了玩機子,對 Linux 稍微有點熟悉了。想隨便列印些東西,留下我們熱身賽的痕跡,於是就列印了 xie xie zhi yuan zhe! thank you, volunteer!,志願者哥哥有點繃不住了:" 你們隊的程式碼很有風格 "。

熱身賽一發沒罰,排在金尾兩名,挺好的。事實證明把我放在三號位上冷靜是很好的選擇,前面的題可以無腦相信隊友。

熱身賽後一個半小時被華為講座硬控,哥們又來做了一回抽獎分母。

晚上和兩位朋友一起出去吃了火鍋,This is true food!吃完火鍋後,騎電動車回到了酒店,騎行的感覺很不錯。

回到酒店後洗了個澡,把 2024 北京市賽 H 改了一下,再把上海站 E 改了一下。然後打了 \(2\) 把 LOL,被 \(4\times 2=8\) 頭豬給氣死了 ...

Day 1

九點半開場,開始先開了 G,有了一點初步的思路。七分鐘的時候有隊伍過掉了 M,後面陸陸續續也有隊伍過了 M,於是回過頭來看 M。

M 是個構造,手玩了一些樣例,暫時沒得出什麼普適的構造。回憶起之前關於構造題的種種不悅,和隊友說明了一下我弱構造的情況,於是我們交換了一下題目,隊友來開 M,我去開 J。

J 延續了隊友 " 只有 Alice 先手,並且一步可以升序排序的情況下,才是 Alice 勝 " 的思路,這個結論也是蠻感性的,嘗試證明了一下發現很對。並且敏銳地察覺到了 \(n = 3\) 的 corner case,上機寫了一發直接過,此時 00:58:43。

M 隊友透過打表並且觀察得出了一個普適的構造,並且透過了他自己寫的 check,交了一發也是直接過,非常好!此時 01:12:52。

在此期間,發現 H 是一眼題,不過我們隊可能對 atan2 並不算很熟悉,稍微磨蹭了一會,但是非常穩地透過了,非常好!此時 01:58:12。

接下來,發現 C, G 都可以開。C 初步地想了一個根號分治的做法,不過 \(k > \sqrt{n}\) 的情況還沒想清楚。G 結合開場的想法有一個很暴力的搜尋,很想上機找一下有沒有特殊的規律(事實上應該是要上去玩一下的,因為我們隊此時沒有對機時的需求)。

此時看榜,發現 L 的透過數逐漸反超 C, G,並且 dirt 率很低,說明 L 的思路是慢慢想可以想出來的。看了一眼 L,發現好像確實如此,於是我們隊的重心就放到了 L 上。初步的思路肯定是讓小的 \(a\) 與小的 \(b\) 配對,但很快就意識到爆炸可能會使得前面較小的 \(a\) 直接失去操作機會。大腦當機了一段時間,突然想到可以將引爆操作放到最後,每個 \(a\) 都選擇不會被當前爆炸殺死的最小的 \(b\) 即可,唉還是爐石玩少了。寫了一下,03:31:56 交了一發 WA 了,有點不知所措。

整個隊伍在此時有點凝滯了,我非常糾結到底是保一個 L 還是繼續開 C, G 然後把 L 交給我的隊友。最後我還是選擇性地盯了幾下 L,發現基本不是程式碼的鍋,那就是思路的鍋。不過整個貪心策略我已經證明過了正確性,看起來是一些細節沒有判斷好。

突然有一個時刻,隊友提示我,會不會要先讓 \(a_i\) 減去 \(1\) 再進行 upd()。好像確實是這樣。改了之後交上去還是 WA,有點束手無策了。再過了幾分鐘,突然意識到要先讓全體的 \(a_i\) 都減去 \(1\)。再試了兩發,終於過了!此時 04:30:01 罰了五發。

接下來在 C, G 中糾結,我認為 C 短時間沒有很好的思路,並且就算有思路也不一定能在半小時之內實現。於是叫隊友一起主攻 G,上機打了個表,發現 \(a, b \leq 5000\) 的情況答案最大隻有 \(14\),意識到答案可能非常小。想著要不嘗試寫一個迭代加深的搜尋吧,意識到自己並不會估計答案的範圍(當時腦子有點壞了,直接選一個能承受範圍內的最大值應該就可以了)。接下來的時間也都沒有很好的想法,慢慢看著倒數計時歸零。


最終又拿到了銅獎。前期我們開題其實是很順的,又遇到不順的情況都透過團隊配合解決掉了(在這裡要特別誇一下我們隊的策略,非常正確!)。可惜到了中期,特別是在 L 上花的時間太久了,在正常情況下花費的時間不能超過一小時的題卻硬控了我這麼久,如果可以省下一點時間再去想想 C, G,說不定一切會不一樣。對不起我的隊友們 ... 不過 L 我們在最後的情況下也沒有放棄治療,依然在積極地尋找問題,到封榜最後半小時終於成功 AC。

我們做到了!一切都是值得的。我和我的隊友們都盡力了,憑自己奮鬥換來的牌子,就算是銅牌我也認了。人總是會進步的,一步一個腳印,心裡很踏實。

在場館內呆到了滾榜結束,見證 FZU 一隊 " 重返未來 " 勇奪金牌!見證 " 哥哥來了 " 成功登頂!並且成功地要到了哥哥簽名!不虛此行。

晚上也是體驗了一把菌子火鍋,第一次聽說吃菌子火鍋前要 18min 高溫加熱,還要對菌子湯進行取樣,地地又道道。

這個賽季也算是結束了,線下賽的體驗真的很美妙,不過可能要回歸文化課一段時間了,把高數與線代的基本功打紮實了,爭取把英語學好。除此之外真要好好地練一練二分圖網路流、計算幾何了,希望可以成為一個六邊形戰士,期待明年更好的自己。