Skip to content

Commit

Permalink
ICPC WF '24 Finalized
Browse files Browse the repository at this point in the history
  • Loading branch information
littlecube8152 committed Sep 19, 2024
1 parent bc9a8b8 commit 306ec68
Showing 1 changed file with 158 additions and 4 deletions.
162 changes: 158 additions & 4 deletions content/posts/ICPC-WF-2024.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@ tags: ["ICPC"]
summary: ""
---

## Preface

待補。
本文作為一個 ICPC '24 WF 參賽的一個心得紀實,期望能是提供參與 WF 的一些經驗,或者作為以後隊伍的借鑑,希望能給未來的隊伍一些根據,或是一個你們再怎麼差也不會遜於我這破爛不堪的結果。也同時藉此紓發一些在心裡藏了一年的感覺。

## Day -1

Expand Down Expand Up @@ -66,7 +64,7 @@ ICPC Challange

下午是為數不多的 Excursion 時間,不過好像就是去當地的科博館晃晃而已,除了一開始有玻璃天空橋讓我懼高症發作以外,其他的都好像還好,聽起來比較像哈薩克大外宣 (X)。晚上就沒什麼事,除了傅教授竟然早上都沒出現,到了吃飯的時候第一個到而已。

# Day 3
## Day 3

Dress Rehearsal

Expand All @@ -82,4 +80,160 @@ Dress Rehearsal

測完機就完全沒什麼活動了,除了 CLI 以外,不過我們還是早點回飯店吃晚餐休息了。

## Day 4

World Finals

正賽的規則大多都熟悉了,沒甚麼好說的,除了大會給的 T-shirt 必須要是上半身的最外層,還有如果大家提早準備好的話比賽會提早開始。

早上的時候收到消息有 15 顆氣球,不過我猜應該還是 ~12 題左右,畢竟他們測機的時候是說放 12 題可以測系統的 full potential。
我的隊友說 15 題不見得是壞事,但我完全不懂他的邏輯在哪,畢竟團練中有好幾次隊友讀題目一直漏看重要條件以至於我們卡很久,11 題都讀不好了更何況是 15 題。

但就不多說,直接進入正題吧。

開場我先打 default code,記分板據說 B 是水題,不過打完的時候我隊友在看,所以就先去看其他題目。C 的題序算短,輸出好像也單純,所以就先看一下,基本上就是 parse 小東西然後注意細節就好了。

- 0:20:40 C <green>AC</green>

寫完之後高嘉泓聲稱 B 很簡單,上來寫一下傳上去

- 0:27:27 B WA

想說 B 不是水題嗎,怎麼這樣,所以我就聽了一下他的解,他先是 claim 了一個人的數字要是後面有出現那答案就是 0,然後再 claim 剩下的答案就是均分,我想了一下覺得怎麼可能,隨手構了一個 `2 1 1` 跟他說他到底在說什麼,算一下之後發現原本的做法行不通,隊友跟我說 F 好像有一些人過,所以就一邊想想這兩題,想到 B 的一些算法之後怎麼做都不會,感覺如果是這樣複雜的機率模型不可能這麼多對過,結果我重看一題目就發現抽數字的機率根本不是所有數字等機率,是把所有出現過含重複的數字洗亂之後依序叫。

這時候光化時間抓第二個 claim 假解就花了一些時間,所以我把改好的做法跟高嘉泓講請他上去寫,然後我回去想 F。

- 0:58:53 B WA

還是一樣,不過 F 我想到直接對答案二分搜瞎搞一下複雜度應該隨便過,就覺得我應該不能被 B 卡住這麼久,先上去寫,寫完

- 1:11:19 F TL

看一下複雜度這應該隨便過才對,不過很快就被抓到我的二分搜爆 `int` 了,真是有夠蠢,改完之後

- 1:12:44 F WA

左看右看竟然又是二分搜上界不夠小,我實在是有夠蠢。改完檢查一下應該沒有更多智障東西就直接傳了

- 1:14:26 F <green>AC</green>

後來回去想一想 B 高嘉泓就一直跟我對題目的哪邊要怎麼算一直有歧異,後來抓一抓模擬一下就發現連他第一個 claim 都是錯的,所以我很快地把錯的打掉重來之後,感覺這次就該過了吧,不過

- 1:33:02 B WA

看一下 code 跟我模擬的怎麼有點不一樣,結果我機率算錯了,忘記考慮重複出現,所以改一下

- 1:35:45 B <green>AC</green>

到這裡雖然 B 雷了很久,自己開場也壓力很大、很急、然後一直粗心,不過我告訴我自己應該還有機會,只要穩下來就好。現在大約版上可以做的題目還有 A、D、I 要開,我先是看了 D 想想這種區間配對題應該是 greedy,推了一個還算合理的 greedy 之後暫時想不到要怎麼好好維護。I 則是一個經典的題目,不過我在想得時候就一直抱怨自己為什麼沒有好好補掉蛋餅愛涉水,不然我就可以快樂無腦直接過了,所以還是花了時間想一下這個麻煩的二分搜子問題要怎麼做,不過還是沒啥頭緒。

D 後來倒是畫圖就滿顯然知道要怎麼維護的了,所以寫了一個 greedy 傳上去

- 1:52:47 D WA

WA 的時候先是看了一下 code 有哪邊有問題,果不其然發現有一個字打錯了。修完再傳

- 1:56:15 D WA

這時候的我有一點慌了,畢竟自己不擅長這類 greedy 的題目,隊友又在 B 題雷了兩個 claim,深怕這個 claim 又是一個敗筆,之前團練的經驗又告訴我,我的隊友容易被我的假解說服,不過我還能怎麼做呢?所以我把 code 印出來叫我的隊友找 bug,我負責去想 I。

中途高嘉泓跟我講了一個與原先不一樣的樹 greedy,不過他自己講一講就發現是假解了,倒是這個想法啟發我原本一開始 brainstorm 的時候好像有一條路是行得通的,所以想一想之後就跟隊友 claim 我會就先切題上去寫,中途出了一些問題,因為我沒有想好一個小 case,這時候高嘉泓跟他要測 D 一個東西,測完就發現我 D 為了讓兩邊集合互斥的方法是爛掉的,改完之後傳上去

- 2:18:59 D WA

不過這時候我在專心弄 I,想通那個小問題之後範測就忽然都過了,確認一下應該沒出事就直接傳了。

- 2:28:12 I <green>AC</green>

回頭看剩下 A,一聽隊友說題目不就發現這題不是只是麻煩的 [JOISC '19 Naan](https://oj.uz/problem/view/JOI19_naan) 嗎?回想了一下就想起原本那個 greedy 了,於是我先不想算一元二次方程式寫了個三分搜想騙一下時間,果不其然

- 2:53:22 A TL

所以只好把那個三分搜改成公式解,在改之前高嘉泓又發現 D 為了讓兩邊集合互斥的方法還是爛掉的,修完之後終究

- 2:58:42 D <green>AC</green>

公式解超級難實作,所以後來我還是直接用`array<double, 3>` 然後寫一些基本的多項式操作輔助推式子,式子基本上沒問題,不過我中途漏了三個 case:

- 解出來的根不見得是取正或取負
- 有可能會退化成線性方程或常數(如果區間面積是 0)

因此我就被這一堆 bug 糾纏卡了好久,

- 3:10:39 A RE
- 3:14:19 A RE
- 3:23:51 A WA
- 3:30:45 A WA
- 3:33:57 A <green>AC</green>

做完之後隊友跟我說還有 J 跟 L 是比較有機會做出來的,這時候我先是聽了 J 的題目然後去上廁所,完全忘記這場比賽有午餐可以吃,前面的 schedule 基本上就是我要不是在 debug 就是在寫,不然就是在抓隊友的假解。

這時候我沒有特別看時間,不過現在回來看其實有點走遠了。

回來之後暫且對 J 沒有想法,但高嘉泓跟我說 L 可以做,他首先是跟我說什麼亂做一通需要考慮的可能很少,但我心想什麼鬼你要找到 exact solution 這一點用處都沒有啊,後來用他的做法拼湊了一個 DFS 的作法,不過這時候我一直以為我要找的是起點的可能性,不過寫下去就寫下去了,大概寫完的時間還有一小時,心裡想應該可以多做一題,也不要再跟 PJ 說的一樣台大隊伍封版後就很常開不出來。

不過實際 debug 還是花了蠻久的,最後第一次 attempt 是

- 4:33:03 L RJ

後面我都忘記是 RE 還是 WA 了,總之我們先是懷疑超出操作次數,所以 `assert` 一下才發現我的 visited 紀錄寫爆了,後來修好之後懷疑是走進牆裡,結果 `assert` 發現不是,後來東修西修也不知道到底為什麼會錯,就亂修一下丟一下。

- 4:36:29 L RJ
- 4:38:00 L RJ
- 4:43:36 L RJ
- 4:50:27 L RJ
- 4:52:46 L RJ
- 4:57:35 L RJ
- 4:59:48 L RJ

比賽就這樣無聲無息地劃下了句點。

賽後其實 J 認真想一下就知道要怎麼做了,然後很晚的時候才意識到 L 是你要知道結束的點,不是推算開始的點,換句話說一開始做的題目就是錯的,自然就假掉了(因為我是用起始點可能推算結束點)。還有一種可能是在對稱的地方如果點對稱軸是實際的格子,那就可以走到那邊確定答案。

這場我之所以為什麼會打爛呢?

- 一上場就緊張、慌掉
- 題風驟變,好像沒有幾何卻有很多 greedy
- 隊伍之間合作不夠好
- 單純實力不足

首先,一個合格的競賽選手應該要身經百練,或者有一個穩定的心態不會在大賽的時候慌亂。在 IOI 的時候,至少我已經有很多 virtual 的經驗了,再來我是抱著一個以競程為樂得正向輕鬆態度面向比賽。不過在 World Finals,前幾天我就多次被其他隊伍堅強的實力嚇壞了,自己也確實提不起勁享受 ICPC 類型的比賽,不過這些都只能怪罪在我對於比賽不夠熟悉,也沒有真正掌握到比賽心態的精隨,或許我成為 IOI 國手需要三年的時間,要成為一個像樣的 ICPC 選手也需要差不多長的訓練以及調適時間吧。

第二,題風驟變,失去可能有把握的幾何換來了 greedy,只能說是時運不佳或者我單純實力不足,而且後者的可能應該相對前者嚴重許多。一個像樣的 World Finals 選手可不能這樣挑食不寫 greedy 或不寫幾何,所以畢竟遇到我不擅長的領域只能是乖乖回家認清自己羸弱的事實。

第三,隊伍之間合作其實或許跟平常狀況差不多,今天我嘗試掌控場況請隊友支援 debug 或畫測資比起一般團練來的好一些,不過代價則是我必須一直處於有生產 code 的狀況,基本上沒多少時間可以下來好好想題目,更是沒時間寫紙 code 上去對或者先想好實作細節。不過說實話隊友之間的掌控一直是我學不會且不擅長的,要不就只能說是我的管理能力不佳,沒辦法領導整個隊伍。

最後,單純實力不足,也就是我太菜了應當回家多練。

綜觀全局,如果這是一篇故事,無論是小說或者電影,事實上這樣最終收盤在 42nd 的成績,應該是不折不扣的一個,對觀眾或讀者來說相當合理的結局。這次的挫敗我無話可說,因為本應如此。

對於以後的隊伍,我想建議你們組一隊平均、可以互助合作、一起成長的隊伍。一來 ICPC 的宗旨之一就是與朋友一起切磋練習,互助合作走到最終舞台,二來一個隊伍若是只靠一個人,要不是這個人失常倒下,就是這個人分身乏術,ICPC 一直很重要的一個資源就是人力資源,只要能好好把三個人的全部時間都發揮出來,效率光是一個人的兩倍就足以有極大的優勢。

我們的隊伍基本上就是我做大約 50 ~ 70% 的工作,以前是隊友一直噴想法,但現在好像變成他一直噴假解了,倒數第二次團練的時候我覺得我好像太容易用假解說服我的隊友,然後我就上去浪費時間。如果能有一個溝通與自己比較容易,或者能夠互補把漏洞抓出來的隊友也是相當不錯,不過我自己認為還是避免在 ICPC(我覺得是任何比賽)在沒有很強的根據下亂 claim 亂猜,畢竟要抓假解是可以花上時間的,要是最後檢討發現這個性質無根無據只是亂猜,只能說全部都是徒勞。

現在想起來代數導論的教授說過,做數學不能只是用直覺覺得哪些定理/性質是對的,我現在有了深刻的感受。

## ---

時間倒帶回到 IOI 比賽前的 ICPC 培訓班。

ICPC 一直是眾多高中 OI 選手畢業後憧憬的競技舞台,或許在這樣的氛圍下,原先對 ICPC 興致缺缺的我也起了參賽的念頭,只不過大多數的人都是內卷中的內卷,期初的時候大家都已走滿三人,就大概只能組個練習觀光型隊伍,期許自己在一年的觀望或者實力累積下,未來能夠在計分板的前排有著角逐冠軍的潛力。

ICPC 相對於 OI 比賽可以說是天差地遠,首先,在過去的團練經驗當中,ICPC 各賽區的區域賽對題目的口味上就有相當大的不同,反觀 OI 絕大多數的主流比賽都在往 IOI 的品味接近。不僅如此,對於我,一個曾經的 OI 選手來說,完全純仰賴構造或者數數類型的題目,基本上就是我曾經不碰也不喜歡的各類 Codeforces / ARC 題目的進化,想當然對於這樣挑食的我鐵定是吃不消。更為難以跨越的一道壕溝便是跨出 IOI syllabus 所劃定的舒適圈,突如其來的各種科技更是給了我莫大的打擊。

再者,ICPC 的賽制在題目的數量上就有著顯著的差異。在 OI 比賽中題目不過三或四題,不僅可以在短短的時間內有著更為深入的觀察與鑽研,更為重要的是有子任務作為引導或部分做法的獎勵;在 ICPC 中一場比賽大多都有十多題,需要的能力反而是如何在短時間內精確的解出題目,隊友間的 workflow 是否能在比賽中順遂的不斷增加題數。對於一個沒有經驗、沒有雄厚實力的隊伍,一腳踏進這篇未知的大陸上在預料之中摔進了泥淖,團練成績或許只能做為出席證明。

這樣的我大一上的期中就決定大二不再參與 ICPC 系列的比賽,一來是因為自己深知這樣的隊伍以目前的合作方式不可能走遠,二來是每次參與培訓班或團練的各種題目讓我原先對 ICPC 的三分鐘熱度漸漸消散。

不過這篇文章所記錄的,終究還是發生了。

My worst nightmare has become the reality.

一切都是因為我自己的實力不足,無論是沒辦法一間扛起整個隊伍,又或者是當初組隊時就沒有發現這樣失衡且沒有向心力的隊伍終究是得拆散的,抑或者是我所缺乏的那個面對 ICPC 的動力。

自己在這個會場的幾天。一直在想我的心裡是否還有那個參與奧林匹亞、無時無刻不對競賽題目興奮的那個小孩。但我找不回那個感覺,或許我面對 ICPC 的熱情早已剩下殘灰了,大一時期對競程興奮的高峰,仍然是那個連續四天晚上跟著 JOISC Online Mirror 的時刻。

ICPC 我想並不是屬於我的舞台,這句話實在是對極了,競賽生涯真正就這樣畫下一個句點了。有沒有一個悔恨、或是憤怒想要回到這個會場復仇呢?

我不知道。

0 comments on commit 306ec68

Please sign in to comment.