臺灣 ICPC 簡易介紹與攻略

前言

上大學之後作為 std_abs 的一員,從大一到大四打了四年的 ICPC 已經差不多要退役了,感覺 ICPC 台灣這邊比較少公開的相關心得,所以這裡就寫了一篇以台灣大學生出發的相關介紹與攻略。

原本想說等正式退役(也就是最後一場 WF 比完)之後再寫,但 WF 今年好晚,而且總感覺還會再延,這樣拖下去就太久了,所以就決定在退役前先寫了。

寫稿當下是 2026 年的暑假,而我打的賽季是 2022-2025,所以各種的分析主要都是參考 2024-2025 這兩年,需要注意過個幾年可能會不太一樣。

台灣 ICPC 比賽

台灣有關的 ICPC 比賽與晉級路線大致可以用這張圖來表示:

裡面最重要的比賽大概是台灣 regional,所以先在這裡提一下晉級規則讓各位先有個概念。最近幾年來看錄取的順序大概是:

  • TUPC/PUPC 各取 10 隊,每校最多兩隊
  • TOPC 每校取第一名,取 30 校
  • NCPC 決賽前 40 名
  • CPE 推薦 10 隊
  • 剩下照 TOPC 名次補滿,大約會補到 100 隊

如果有一隊同時拿到兩個名額的話那疑似會先優先遞補同校的,但這部份我有點不確定。順帶一提的是各種 regional 打得不錯可以拿到 APAC 的門票,拿到冠軍則是可以直接拿到 WF 的門票。

另外比較重要的是很多比賽都有限制學校的隊伍數量,像是台灣 regional 是 10 隊,APAC 是 3 隊,WF 是 1 隊,但目前台灣除了台大跟交大是不太會遇到,所以下面在講晉級條件的時候很多是無視這個規則去分析的,因為是這兩間學校的晉級難度很大部份會取決於該年度該校隊伍的強度。

TUPC/PUPC

沒參與過所以沒辦法講什麼 QQ。我只知道是辦給科大跟私立大學的比賽,兩個各取 10 隊可以進台灣 regional。時間好像會辦在比較奇妙的時間,2026 年看起來是辦在暑假的某個平日。

TOPC

台灣 regional 的預選賽,會辦在某一個九月的星期六早上,雖然 ICPC 一般是五個小時,但畢竟這是預賽,所以只有三個小時。

至於大概要打出怎樣的成績才能用 TOPC 進台灣 regional 呢,首先如果你是台大或是交大的話,那就是儘量打進校內前 10 就對了,可能就要自己去調查一下自己學校其他隊的表現怎樣。至於其他學校的話,最簡單的當然拿到每校第一,2024 跟 2025 參加的學校數大概就是 30 附近,所以拿到第一基本上就穩進了。至於沒拿到第一的話要看前面有沒有重複的名額,最近兩年目測起來是補到大約 40 名吧,但這個名次在很多學校已經可以排第一了。所以我會覺得 TOPC 對每個學校幾乎都是跟自己學校打,台大、交大這兩間就是打到前 10,其他學校就是想辦法以拿第一為目標。

如果說想要把目標放在前 40 好了,以 2024、2025 來看這大概等於解完六題,我自己是覺得這些題目需要的知識點都不太難,以下暴雷:

2025
  • A:純寫
  • B:質數判斷
  • C:簡單 bfs
  • D:簡單區間 dp
  • L:簡單幾何(線段相交)
  • E:二分搜之後 bfs 判斷答案是否合法
2024
  • J:純寫
  • A:純寫
  • K:拓撲排序
  • B:簡單轉換一下變最大連續和
  • D:好好枚舉算期望值
  • I:位元 dp,這應該是兩年提到的這 12 題裡面最難的

所以我會覺得比較重要的是穩定的實作能力跟 debug 能力,TOPC 很短只有三個小時,根據自己在 2025 TOPC 燒爛的親身經驗,在燒雞的狀況下這時間一下子就過去了,所以把時間專注在實作訓練跟團隊配合上我覺得會比較好。團練配合應該重要一點,應該很大程度可以提升 debug 的速度。

NCPC

有初賽跟決賽,NCPC 初賽一個特殊規則是每年的前三名學校可以拿到自辦初選的資格(印象中拿一次好像接下來三年都可以?),但基本上每年就是台清交,不過 2024 中央也有拿到資格就是了。這些學校就會把 NCPC 初賽當成校內賽作為一種選拔,像是台大會用校內賽決定培訓班誰可以拿到公費出國的經費。至於其他學校就要打 NCPC 辦的初賽,我是沒有打過但據說這初賽的題目非常…有趣,品質可能不太好。但總之 NCPC 初賽的目的也只是要幫每校選前六名出來打決賽,所以就一樣跟自己學校打就好了。

決賽的話又稱為獎金挑戰賽,總共有 15 隊會拿到 1 萬到 10 萬的獎金,而且每校只能兩隊拿所以不用怕台大交大把全部獎金都拿走(??)。不過我自己覺得 NCPC 決賽題目的風格還是比較像是古老年代的題目,例如每題都多筆測資然後不太會講清楚測資數量之類的資訊,然後測資有時候也沒有很強,永遠記得我 2022 的時候因為模版問題在一題應該要用最大流的題目乾燒,然後在走投無路的情況下瞎寫一個一臉是錯的 greedy,然後就很神奇的過了 XD,總之這比賽有時候亂喇一下搞不好會有奇效。

獎金以外比較重要的是 NCPC 決賽前 40 名的隊伍可以進台灣 regional,如果自己學校有其他很強的隊伍讓你拿不到校內第一的話,那這是比 TOPC 用外加名額進還要容易許多的,如果 TOPC 不小心打差的話要好好把握。

CPE

先說在前頭這不是 ICPC 比賽,只是因為 CPE 可以推薦 10 隊進台灣 regional,所以還是在這裡簡單提一下規則。

CPE 是個人的檢定,一年會辦四場,要拿到推薦資格的話要隊伍的三個人都在前一個學年打至少三場才能拿到資格,然後之後再去比誰的 CPE 表現比較好,但是每間學校最多只能一隊。我自己其實是沒打過 CPE 但我覺得這聽起來蠻累的,而且要三個人都在前一年組好並一起努力,不過 2024、2025 這兩年看起來是只要有資格且學校沒有其他隊的話都能進,2025 甚至最後只有九隊,被刷掉都是因為同校,所以我覺得你如果真的很想要進台灣 regional 想要買個保險的話是可以考慮,難度的話可能還是跟你學校有沒有人也想要用這個管道晉級有關吧,所以還是要好好調查自己學校 XD。

台灣 regional

進入到最主要的比賽了,總之前面講了這麼多晉級的前置比賽,我覺得除了 NCPC 決賽以外其他基本上都是自己學校校內在比而已,所以如果能了解自己學校有什麼隊伍那可能會比較有概念自己有沒有辦法進。

先從題目開始講好了,個人覺得台灣 regional 早期的題目有點…怪,對於銀獎銅獎那塊應該還是有點鑑別度,但金獎跟冠軍就比較少,尤其是 2023 年非常好笑的出了個 10 題簡單題再加上 3 題難題的抽籤場,從第 3 名到第 29 名全部同題數看起來超級好笑。不過 2024、2025 年的題目都還不錯,至少是可以區分出隊伍實力的比賽。

打台灣 regional 大概有幾個比較清楚的目標:

  • 銅獎(前 60 名)
  • 銀獎(前 30 名)
  • 拿到 APAC 票(大約前 20 或前 25 名,取決於台大有沒有隊伍拿冠軍)
  • 金獎(前 10 名)
  • 直接拿到 WF 票(冠軍)

從近兩年來看,銅獎我目測需要做的題目難度跟 TOPC 前面提過的差不多,甚至再簡單一點,基本上需要的知識點還是不會太難,感覺讓自己能夠穩定發揮還是比較重要。金獎跟冠軍就有點難講,我是覺得金獎的難度跟在 APAC 拿到 WF 票差不多難,但很大程度還是會跟那年台大的實力跟有哪些外國強隊來台灣比有關。下面就把重點放在銀獎,畢竟在台大有拿冠軍的情況下,銀獎跟 APAC 票是差不多的。2024、2025 看起來要拿銀獎的關鍵題大概是:

2025
  • I:幾何,但只需要凸包+算數學
  • K:暴力,考點比較是要能夠把想法寫出來
  • J:思維成份比較重的資結題,比較難的是要挑到對的思考方向
  • L:思維成份比較低的 DP 題,想法不難想但實作有點多邊界的細節要考慮
CF 上這些題目難度大約在 2000-2300,要拿銀獎這些題目必須解出至少兩題
2024
  • M:不要讀錯題目很常規的枚舉題,然後再想辦法維護一些東西來優化複雜度
  • H:數數題,難點比較像是要想對方向
  • I:純純的資結模擬題,需要的資結並不難(trie 跟 priority queue),所以難點會是要能夠實作出來
CF 上這些題目難度大約在 2000-2300,要拿銀獎這些題目必須解出至少兩題,或是一題 penalty 夠小

從這兩年看起來,銀獎那附近的關鍵題們大約在 CF 上難度是 2000-2300 附近,難度其實沒有特別高,如果有想要搶票的話可以先試著讓隊伍有能力做出這種難度的題,剩下就看賽場發揮吧。

亞太區其他 regional

除了台灣以外,亞太區還有很多國家是會辦 regional 的,其他國家可以來台灣參加我們的 regional,我們當然也可以去參加他們的 regional,但在現在的規則底下除非哪一年台灣不打算辦 regional 了,不然每一隊都只能去一個國家。

跟台灣 regional 還要比預賽相比,國外 regional 就基本上沒有什麼限制,只要有錢且名額沒有滿高機率就是報名得到。至於會想要打國外 regional 大概就是兩種可能,第一個就純粹想要去體驗想要去玩的,第二種就是為了搶 APAC 或甚至是 WF 票,大概就是一種花錢課金多換一次抽獎機會的概念(?)。

後面有一個章節我會再簡單介紹一下另外四個國家的 regional,要先在這裡講懶人包的話,我自己覺得印尼是最容易搶到 APAC 票的,但缺點可能是太遠機票會比較貴(?)。

Championships (APAC)

亞太區的決賽,絕大多數的 World Finals 票都會在這裡發出去,每年亞太區大約是 16-18 間學校可以進。相比 APAC 的票,WF 的票就難拿非常多,最近這兩年的題目難度配置有點不一樣,但這兩年都要有辦法做出大約 CF 難度至少 2600 的題才有機會進,不過這也很正常畢竟從 20262025 這兩年的參賽隊伍看起來就是一堆紅紅橘橘的。

就算沒有想要進 WF 的遠大目標,我自己覺得能夠去 APAC 也算是一個很不錯的體驗,畢竟這裡幾乎就聚集了所有亞太區的競程強者,如果英文好且是個 E 人的話跟其他人多講點話多交流的話應該可以玩的很開心(可惜我又 I 英文又不好)。撇除跟其他人交流的社牛環節,跟區域 regional 相比這裡贊助商就非常多,可以領各種紀念品,有的贊助商還會有吃的喝的玩的東西所以在會場的時間不會無聊,更重要的是還可以吃到 Jane Street 拔拔的高級 buffet,我兩次 APAC 都吃得很爽(X。

總之我自己是覺得如果喜歡打競程且願意花時間投入 ICPC 的話,那「打進 APAC」感覺是一個可以投入的目標,也希望以後能看到台灣越來越多隊伍打進 ><

World Finals (WF)

ICPC 世界總決賽,跟台灣 regional 牌像是不要錢隨便發相比 WF 的牌很難拿,2025 之前都只有 4 金 4 銀 4 銅,雖然寫稿的附近已經宣佈 2026 年會改成 4 金 6 銀 10 銅,但難度還是很高,有紅黑人的隊伍一隊發一面就快要沒了。話是這樣說,我覺得 WF 能不能拿牌很大程度還是在比誰犯的失誤少,體感只要是三個紅的隊伍就都有能拿到牌的實力,關鍵還是在到時候比賽發揮的怎樣,像是 2025 WF 的時候我開場就搞耍所以打的很普通,但就算這樣還是贏過了不少我賽前認為比我們強的隊伍,所以再怎樣比較需要的還是穩定發揮吧。

我參加完 2025 的 WF 後有寫一篇簡單的心得,有興趣的話可以看一下:有雷版(比賽過程)無雷版(純遊記)

亞太區國外 regional 們

以下就來簡單介紹一下台灣以外亞太區常見的區賽,再強調一次這是照我的參加經驗寫的,可能過個幾年會長的不太一樣。

亞太區每年大概就是台灣、印尼、越南、日本和韓國這五個地方會穩定辦,2025 的時候泰國跟菲律賓也有辦,但也就只有那年而已,所以下面就只介紹主要其他四個地方。

印尼

std_abs 在 2024 跟 2025 去過兩年拿了兩個冠軍,這應該是我能講最多的 regional 了(X

印尼站這幾年都固定辦在雅加達的 BINUS 大學,大概是個離機場搭 grab 40 分鐘車程的距離,不會太遠。住宿可以直接訂他們大學的宿舍,到時候測機和比賽的那兩天早上還可以直接搭接駁車到比賽會場,雖然飯店到比賽會場大約只有一公里,但那條馬路嘛…,我實在不確定走一公里會不會出事,我們那時候走到大約中間點的 pizza hut 吃晚餐我就感覺隨時都有可能被撞了,有點可怕。

賽場環境我自己覺得還蠻不錯的,兩天的活動大會會提供兩天午餐跟一天晚餐,我自己覺得食物算蠻符合我胃口的,但我是那種對吃的幾乎沒啥感覺的人所以問我可能不準。

印尼站排名前面的會有金銀銅獎,2025 年是發 3,4,5 個,然後這應該是少數會有獎品的 regional,就算一間學校只會有一隊拿到獎品也很不錯。我覺得獎品還蠻好的,我這兩年金獎有拿過音響、鍵盤、行充等等,首殺獎還會有馬克杯(雖然拿太多很難帶回來是另一個故事)。

題目狀況的話,從 2023 開始疑似因為出題人換了一批導致題風大變,我覺得這幾年印尼站的題目大部份只有兩種類型:一種是比較偏典型的題目,有經驗的人看完就大概知道怎麼做只是要實作一下子的題目;一種是 CF-style 類的梗題,特別的是賽局、XOR 幾乎每年都會有。以 2025 年為例好了,大概的分類就是:

2025
  • 典型題:BDIKL
  • 梗題:AEFGHJM
  • 其他:C

所以感覺去打印尼站只要有一個人很會做經典題跟寫程式,然後一個人很會做梗題就高機率可以打很好。如果想要拼的話可以考慮往這兩個方向練習,前者大概就是多打 ABC 吧,後者不確定,可能要有多寫點 CF 題來獲得靈性(??)

而如果目標是要來搶 APAC 票的話,我自己覺得這五站裡面是算好拿的。首先相比其他地方,印尼的國內隊沒有那麼強,所以搶票難度比較會取決於外國隊,但這幾年感覺來印尼的外國隊也沒有很多,不知道是不是跟印尼的地理位置有關,他離日本跟韓國這兩個強國實在太遠了,多少會降低點他們想要來的慾望。所以最主要要搶票就是跟新加坡和一些越南隊吧,但 NUS 應該很容易就拿得到 regional 冠軍所以不用管他們,真 NTU 也頂多佔掉三張票,越南感覺也不會有很多隊跑來,所以綜合全部我覺得印尼的 APAC 票應該要不難拿。唯一的問題可能是他們的 site score 一直以來都是偏低,票不會發很多張。

越南

我對越南的題目之類的就沒有太多的研究,最近幾年的題目也只有打過 2022 跟 2023 而已,整體題風我感覺是前期的簡單題會偏多,可能跟台灣 regional 前四題的簡單程度有得比,但是中後期就還蠻有難度的,甚至在 2023、2025 從記分版來看看起來都是當年度亞太區第一或第二難的。越南的國內隊伍感覺是比台灣強的,但是越南的 site score 都是誇張的高,所以票的數量很多,平均下來要去搶票可能頂多比台灣難一點吧。

另外要注意的是 2023 跟 2025 的題目據說都有點問題,一個是官解假解,一個是測資太爛導致大難題被很簡單的假解唬過,感覺近期有兩次算是蠻頻繁的,如果要去的話可以小心一下,雖然我不知道有什麼是可以預防的,std_abs 印象中有打過兩次題目有問題的比賽,然後那兩次我們都打的很悽慘。

日本

可能有點暴言但我覺得會去打日本的就只是想去玩的,而不是想去搶票的,畢竟要搶票的話明顯有其他更好的選擇。話是這麼說但 2025 NUS 的 Strong Zero 就跑去日本拿了個冠軍就是了,如果你對自己有信心可以在日本也搶的到票的話那感覺也很好。

題風的話,雖然 Atcoder 上的題目幾乎都是日本人出的理論上 regional 題目也會比較偏 Atcoder-style,但我倒覺得沒有,感覺還是會有一些 Atcoder 比較少見的題目(例如比較偏典型跟實作的題、幾何等等)。另外比較明顯的可能是日本站前幾題就會有一定難度,大概第一題就有到台灣 regional 第五題難度了吧,但整體的難度分佈還是中前期題比較多。

我聽有去比過的隊伍是聽說比賽品質跟賽場環境很好,而且去日本應該比較不需要擔心飲食,但我覺得除非你有台灣 regional 金獎的實力,不然我是想不到除了累積經驗跟去玩的以外的理由。

韓國

std_abs 在 2023 年以冠軍為目標選擇去了韓國,最後拿了第二,有點可惜但我現在會覺得當時實在是也打得不怎麼樣,去韓國這種強國能拿第二也蠻扯的(汗

韓國雖然每年都叫首爾站,但他們都會辦在不在首爾的地方,我比的那年辦在高陽市,算是在首爾附近,但從機場要先搭車到市區再轉公車,記得要搭超過兩小時超級久,然後會場附近看起來也很偏僻沒什麼店的感覺。然後 2025 直接不演了辦在釜山,兩個地方在南韓的南北欸,有點不懂反正超怪。

題風的話我感覺絕大多數的題目都是偏典型的題目,不太會有思考層面的難題,然後偶爾會出現跟考古題很類似的題目,如果打算去的話可以試著把前幾年的題目全部 virtual 或看過。另外偶爾也會有很經典的純科技題,經典到會被放在那個科技的教學文的習題之類的,有空多學或抄一些科技塞進 codebook 可能會有奇效?搶票難度的話我就不太清楚,但體感也只會比日本簡單一些吧。

各種雜項

最後就打一些我這四年下來自己針對各種事情的一些看法,下面比較像是想到什麼就打什麼,沒有特別的編排所以可能有點亂或跳脫。

關於 regional 冠軍

前面在講晉級規則的時候有提到拿到 regional 冠軍可以直接拿到 WF 票,除非一校有兩隊拿到冠軍才要再另外決定。聽起來直接拿到 WF 票很誘人,但我會覺得除非你非拿冠軍不可(也就是你學校其他隊有極大機率拿 regional 冠軍,例如 2024、2025 的台大),不然這種都是一切隨緣就好了。主要還是我覺得 regional 冠軍的不確定性太大了,畢竟亞太區一隊只能打兩場,你可能會不小心撞到一個一堆強隊去的站,也可能會不小心撿到一個沒有強隊去的,所以除非你有辦法仔細調查所有強隊要去打哪裡,不然我會覺得都是在賭博。

如果要我仔細分析的話,會想要爭冠比較需要擔心的大概就新加坡(NUS)、日本跟韓國吧。新加坡因為他們沒有 regional 所以總是會出來打,我是覺得他們大部份還是直接往印尼跟越南塞,畢竟比較近,雖然 2025 看起來又不是這樣(Strong Zero 去了台灣跟日本)。日本的話強隊我覺得不太會跑出來打,主要是日本人本來就不太會出國(?),這三年也只有 2024 東大的 Screenwalkers 這種頂級隊跑來台灣打(而且我覺得他們會跑來只是因為他們國內預選燒爛被嚇到想要買個保險而已)。韓國的強隊就比較迷一點,首爾大學的強隊在 2023 跟 2025 都有分別去越南跟泰國,比起 NUS 我反而覺得這比較難預測。

我還是覺得當你有想要拼冠軍的想法的時候,你們隊的實力就應該至少可以透過 APAC 進 WF 了,所以除非非拿冠軍不可不然還是隨緣就好了,有時候不要想太多結果反而會比較好(?)。

關於團練 v.s. 個人練

我自己給出的答案是除非你的隊伍實力不足以達成你的目標(e.g. 想進 WF 但是隊伍是三個藍紫牌之類的),不然我覺得團練 >> 個人練。主要還是我認為 ICPC 終究是一個穩定度比賽,如果不是要拼前排名次的話那隊伍實力的上限沒有很重要,重要的是你不能穩定發揮。原因還是 ICPC 多數比賽幾乎都是一場定勝負,大概就是台灣 regional 預賽你有 TOPC 跟 NCPC 兩次機會,TOPC 倒了還有救,但後面 regional 除非出國、APAC 甚至 WF 都是一場定勝負。

用一個比較具體的東西舉例的話,想像上每一隊都有一顆 20 面骰,代表他們大致表現的分佈長怎樣,然後每次比賽就是擲一下然後比誰的數字大。那團練的功用是幫助讓你骰子小的數字變大,練個人實力的話是讓你骰子大的數字再變得更大。以 std_abs 舉例來說,我們三個剛入學的時候就已經是三個 CF 紅人了,但那個時候因為沒啥團練的經驗默契也不好,所以骰子上的數字都很小,可能就一兩個數字很大,所以就導致我們第一年表現不怎麼穩定,好的時候在培訓班也有打過兩、三次台大第一,爛的時候就會跑到第四或第五去了。

照前面提過晉級的各種比賽的條件來看,我會覺得如果目標是在打台灣 regional 或是進 APAC 的話,那畢竟門檻其實沒有很高,我是相信三個藍牌組成的隊伍能穩定打出該有的表現的話也很有機會做出這種難度的題目,所以團練就會比較有用。至於目標在遠一點,進 WF 或甚至 WF 拿牌的話,這時候的關鍵題難度可能會高到 2600 以上,如果團隊實力還沒碰到的話可能就提升個人實力比較重要吧。

關於團練方式

團練比較常用的 judge 大概就是 codeforces gym 或是 qoj,前者是我們之前最常使用的練習平台,因為那時候這上面的場次非常多。不過最近 codeforces 的 worker 感覺蠻容易卡的,團練到一半因為這樣被卡住就有點可惜,還有就是 codeforces 會直接顯示 WA 的測資筆數,有時候運用這個可以獲得一些資訊,但 ICPC 比賽是不會顯示的。綜合前面我現在會推薦全部都在 qoj 上面練,再加上 qoj 上面的場次已經很完整了,甚至有 category 欄位可以讓自己的練習狀況一目瞭然。我感覺現在 qoj 唯一的缺點是沒有隊伍功能,但其實也只要創一個隊伍專用的帳號就好了,如果有興趣打 ucup 的話也可以直接報名 ucup 然後就直接用那隻帳號在 qoj 上面練。至於要怎麼選團練的場次,我自己挑的話大部份就是三種:

第一個不用多說,你不可能不練同一區的各種考古題吧?順帶一提越南 regional 的比賽只有在 VNOJ 上面有,但那個 judge 的 virtual 功能不會有場內的計分版,所以 virtual 的話會稍微痛苦一點,或是要自己寫個工具可以動態更新計分版。

ucup 是一個會從各種地方蒐集不公開的 ICPC 場給大家打的聯賽,從 2023 開始的,目前已經辦了四個賽季。ucup 的模式是每一到兩個禮拜的禮拜六會放一場上去他們的系統,然後他們會開放一些可以開始的時段,可以自己挑有空的時段開打,其中對台灣人比較友善的時段應該會是 13-18 或是 19-24 吧。整個聯賽下來前幾名的隊伍還會被邀請去參加 ucup finals,不過這難度是比 ICPC WF 還難很多的,畢竟你現在的競爭對手不是只有大學生,還有一堆如 tourist 之類的上古神獸。不過因為他的時間直接撞爛台大培訓班的時間,我們其實只有第一個賽季有跟著他們的比賽打,但平常團練挑場的時候還是會 virtual 看看這些比賽。

我覺得用 ucup 作為 ICPC 團練有一個問題是計分版,畢竟 ucup 一堆牛鬼蛇神,你幾乎不需要自己開題,只要跟著其他人的開題順序做題就好了,但一般 regional 的計分版不會開的那麼快,只要你隊伍有台灣 regional 金獎實力的話,很多時候你會遇到把計分版開過的題目都開完的狀況,而這時候你就會需要學習自己開題,但這在 ucup 就比較沒辦法訓練到,反正我是覺得 ucup 還是一個還算適合的練習比賽,感受多一點被海放的絕望感比賽可能也比較不會緊張(?)。

ptzcamp 的話是我在大三以後才開始會選的,主要是之前 ptzcamp 的題目比較零散,只有部份有上傳到 codeforcdes gym,直到現在他們幾乎全部上 qoj 才有比較完整的。關於 ptzcamp 後面有一個章節會提到,我自己是還蠻喜歡這 camp 的比賽的,如果不知道要選什麼的話也可以考慮。

團練我認為除了打完五個小時比較重要的還有檢討,檢討可能包括但不限於:

  • 有沒有覺得有哪一題特別不順的?是卡在思維還是實作?以後可以怎麼調整?
  • 補題之後有沒有覺得哪幾題是有機會賽中做出來的?有的話要怎樣才能提高做出來的機率?

我自己覺得有團練跟沒團練隊伍最大的差別會在最後一個小時的表現,最後一小時通常目標比較明確,手邊有機會做的題目也頂多只剩下一兩題,這時候判斷自己當下該做什麼事情就很重要。我覺得我們之前很常最後一小時會發生的事情是一個人在上機實作,另外兩個人繼續做別題,結果之後上機那個人出了意外噴 bug 了,這樣就算另外兩個人做出來新的題目也沒有時間寫,然後比賽就這樣結束了,更壞的情況是原本在上機的人也沒有找出 bug,最後變成什麼都沒有過。所以我會覺得透過團練練習怎麼判斷「我現在應該要做什麼?」也是一個很重要的事,這很多時候沒有明確的答案,要去盯一下上機的人的實作狀況嗎?還是應該要多花點心力在還沒解出來的題目?手邊的題目類型、計分版的狀況等等都會影響到,這就比較需要累積經驗才能做出正確的判斷。

此外我認為前一個小時也是很重要的,畢竟前面打爛罰時直接輸一截,中間就反而還好,檢討的時候可以先針對前後這兩個時段去討論。

關於分工

先講在前面,我認為 std_abs 的分工其實沒有到很好,我們大部份時候都是誰看到什麼題目就去做,沒有像有的隊伍會特別分配好某某人就負責什麼類題之類的,可能比較明顯的就只有我負責幾何吧。但畢竟我們有紅黑人,很多時候靠他然後我跟 syl 做點中等難度的題目比賽就會打的不差了(汗。不過這可能也是一種 trade-off,我覺得當一隻隊伍個人實力有一定差距的時候本來就會比較難分工,感覺也沒辦法。

雖然這樣說,我覺得讓每個人都有意識到自己可以做什麼還是必須的,然後這個就是多團練幾場自然就會知道了。我覺得我大概在大一下我們密集團練(當時是每週一場 ucup+一場其他的場,推薦有空的話也可以這樣練)之後才慢慢知道我在隊上可以做什麼,那時我就體會到我大概不是需要負責思考的角色所以就開始有意識的多當點碼農並負責寫點麻煩的實作,同時也多學一點典型的科技。

我自己覺得最理想也最合理的分工是鄧明揚在這裡提出的,大概是每一個非簽到題都讓三個人都看過並留下自己的「觀察」,之後收集這些觀察就可以把題目做完並上機。但我自己是覺得這個的實施難度實在是太高,感覺要三個人非常有默契才能實現,畢竟我覺得 std_abs 分工沒有很好的一個原因是我們溝通的效率偏低,在這個分工底下感覺就會花不少時間在溝通,反而變成浪費時間。但我覺得三個有默契的人實施這種策略應該可以很大程度提升速度,願意的話可以先在團練試試看。

關於 codebook

先推一下蛋餅寫的這篇,我學到很多。

std_abs 的 codebook 可能有九成五都是我弄的,很多都是從 8BQube 或是 ckiseki 抄來的,可能只有幾何是我打 2025 WF 前有整個重新搞過的,但反正 codebook 大家都抄來抄去就是了(X。repo 有用個簡單的 CI/CD 可以自動編譯 codebook 跟加 hash,印象中原本打算要可以檢查一些東西但好像沒想到比較好的檢查方法就沒弄了。

我們絕大多時候需要 codebook 的時候都是我上機抄的,除非我那時候沒空。所以我把幾乎全部的 coding style 都改成我自己習慣的,如果你們隊上也是有一個人是負責抄的話那也可以這樣做。

另外我覺得 codebook 的 hash 是必須而且很好用的,前面提過 ICPC 比賽很多時候是在比穩定度,codebook 加個 hash 防止抄錯的話就可以稍微提升一點穩定度。只是我們不是用 vim 所以要驗 hash 的話會要把抄完的文字貼到新檔案然後在 terminal 打

1
cpp hash.cpp -dD -P -fpreprocessed | tr -d "[:space:]" | md5sum | cut -c-6

一長串,稍微沒像 vim 那麼好用但也還好,畢竟打過一遍 terminal 就記下來了。

關於對拍

我想要提倡一個觀念是在很多比賽中對拍都是永遠不虧的。這不侷限在 ICPC 比賽,像是 CF 這種短期賽或是 OI 都是。

對拍是什麼?我自己是把它視為「本地生很多筆測資去檢查各種性質」這個技巧。最常見的就是當上傳 WA 了之後,寫個暴力解跟生測資的 generator,再寫個 script 就可以找錯的測資。我自己的經驗是絕大多數的題目的暴力解跟隨機測資的 generator 都不難寫,而且隨機測資也足夠強,我自己是有自信可以在 3-5 分鐘內就寫完這些東西並找到錯的測資,然後之後會比較有方向 debug。我覺得很多時候五分鐘你可能還在盯著自己的 code 鬼打牆,那不如就把這些時間拿來寫個可以穩定找到錯的測資的方法。當然一個風險是你可能暴力解會寫爛,但暴力解通常都很單純所以應該有點基本的實作能力不太會發生…吧,其實我在 2025 APAC 就寫錯過但我還是想猜那是壓力造成的。

我覺得個人賽寫對拍是肯定不虧的,在 ICPC 的話因為電腦是共用的,多花這五分鐘在前期或是有好幾題需要寫的時候可能多少還是有點影響,可能還是要看看場況。我自己在 2025 印尼站是有過開場 40 分鐘 WA 了開寫對拍這種事,然後我到現在還是覺得這是一個對的選擇,所以可能也跟對於對拍的信心程度有點關係吧。

其他對拍的用途可能包括:

  • 在構造題本地寫一個 checker 並生測資驗構造是不是好的
  • 想要猜一個不會證明的性質就直接生測資並 assert 看看那個性質是不是好的

我覺得第一個在 ICPC 是還蠻常見的,尤其是 ICPC 題目很常會有的構造題,而這類題目很多都可以在本地驗完正確性,那這時候驗了也不虧,不然上傳 WA 還要吃罰時。

至於一般對拍要怎麼寫的話。我自己會寫的像是:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash

for i in {1..100}
do
echo $i
python gen.py > in
./sol < in > out1
./brute < in > out2
diff out1 out2 || break
done

gen.py 是 generator,只要把 WA 的解和暴力解編譯成 solbrute 再用 terminal 跑 script 就行了。順帶一提的是我寫對拍用的 generator 都會用 python,因為多數時候這都不會很複雜,用 python 寫比較短而且會自己換 random seed,非常方便。一個最簡單的 generator 大概像是:

1
2
3
4
5
import random

n = random.randint(1, 10)
print(n)
print(*[random.randint(1, 10) for i in range(n)])

超級短。

關於電腦環境設定

一開賽的時候每一隊都會需要有人去設定電腦的環境,我就是負責做這件事的人。我們的習慣是用另外開的 terminal 編譯+執行,這樣做的好處是只要比賽環境有隨便一個可以用的 editor 我們就可以了,不過最近這一兩年除了 NCPC 決賽其他都有 vscode,所以我們現在也固定 editor 都用 vscode 了。

我開賽設定的流程是:

  1. 開 terminal,打 code tem.cpp
  2. tem.cpp 打完 default code
  3. 把每一題複製一個檔案,就是在 terminal 敲 for i in {A..M}; do cp tem.cpp $i.cpp; done;
  4. 把所有檔案打開,也就是 code *.cpp
  5. 建編譯+執行 script,也就是 code run 之後打 g++ -std=c++20 -DABS -Wall -Wextra -Wshadow $1.cpp -o $1 && ./$1,然後 chmod +x run。之後寫完 code 只要在 terminal 打 ./run A 就可以編譯+執行了

大概這樣,把全部題都先建好檔案並打開的好處是這樣寫完一題就可以把它關掉,然後看著檔案數量越來越少就會比較有成就感(??)。另外有的隊伍會一個檔案例如 A.cpp 寫到底,我自己是不推薦這樣的,第一個當然就是這樣容易搞混,第二就是 ICPC 比賽常用的 domjudge 有自動偵測檔名的功能,例如你直接傳 F.cpp 的檔案他就會自動幫你選擇 F 題上傳,這樣也比較方便。

順便提一下 default code。我們的完整 default code 是這樣,大概可以分為簡寫的 define/typedef 跟 debug macro,如果比賽比較注重速度(例如 TOPC)的話我會先不打 debug macro,然後覺得到比賽到中期了才補上。我自己覺得 debug macro 蠻重要的,可以有效減少 debug 的煩躁感跟花費的時間,而且我打字順的時候就算打完整的 default code 還是可以在四分鐘左右設定完環境,時間也不會差到特別多,所以我現在幾乎都會開場就打完整的。

關於影印

大部份 ICPC 的實體比賽是可以列印的,大部分的用途是寫完出 bug 之後可以先影印下來在場下 debug,電腦就可以空出來寫其他題目,但平常團練還要影印的話可能消耗有點大,所以可以選擇團練的時候另外開一台電腦在旁邊,然後就用那台電腦看 code debug 來假裝有影印。這樣做就是假裝影印不需要花時間,但我是覺得賽中的影印時間有時候不太穩定,體感大約 3-5 分鐘吧,而且印表機出意外導致影印很久感覺蠻容易發生的,像是 2024 WF 的前期印表機就卡住,MIT 就因為這樣導致他們前期大燒,有興趣可以聽聽看他們在賽後訪問的抱怨

我覺得團練在需要 debug 的時候可以試著練習把電腦切成左右兩半,一邊放需要 debug 的 code 然後用滑鼠滾輪來滑 code,另一邊就用鍵盤寫別題,用 vscode 的話可以直接對檔案點右鍵然後點 split right 就好了。我是覺得這樣在前期需要 debug 的時候蠻有用的,畢竟很多時候前期的 bug 都是小 bug,可能多看幾眼就會找到了,如果因為這樣還要多等影印時間的話就顯得有點浪費,更不用說如果遇到印表機有問題的事故的話會造成更大的影響。而我目前想到的缺點只有這樣寫 code 的人不能用滑鼠,但這應該也還好,如果真的有人不用滑鼠不能寫 code 的話那也可以 debug 的人需要滾動的時候再叫他一下就好了。我是覺得只要練個兩三次就會習慣這種 debug 方式了,練一下應該不虧。

關於營隊

現在有一些針對 ICPC 的營隊,形式大約是一到兩個禮拜裡面每天擺一場比賽給大家打。我們在 2025 寒假的時候為了準備 APAC 有參加 ptzcampocpc,前者實體會在俄羅斯後者會在歐洲,都太遠了而且感覺很麻煩所以我們都是報線上。這種營隊的好處就是讓人可以密集訓練,蠻適合在重要比賽前練習的,當初我們會報 ocpc 的原因就是他剛好在 APAC 前一兩週,然後那時候寒假我們都是線上練的所以想說趁那一兩週趕快回歸實體的感覺。

如果兩個要比較的話,先從 ptzcamp 講起。畢竟俄羅斯也算是個競程強國,然後蠻多俄羅斯的高手都會報名,可以見見世面看看自己跟他們的實力差距 (?),當初打的時候就記得每一場都被 Polar Bear Transform 壓在地上打,然後…就又看到他們在 2025 WF 拿冠軍了。其他是比完賽還可以聽大紅人 Um_nik 的題解直播,聽他嘴炮題目還蠻有趣的(??),例如他會說這題在損害他的大腦(???)。不過缺點是比賽的場次他們疑似沒場的時候會搬亞太區的場,所以有可能會不小心打到自己打過的場,像是我們那年就有打到前一年的首爾站,是還好我們都還沒看過那場的題目,不然就浪費了。ocpc 的話…就有點微妙,我總感覺他們對題目的品質沒有好好檢查過,部份比賽的題目會有一些很明顯的問題,例如數數題沒有打 mod 多少、輸入的格式錯誤之類的。要我推的話我會覺得 ptzcamp > ocpc,但主要還是要看時間能不能配合,畢竟一兩個禮拜也蠻久的,三個人很容易沒時間。

總之這兩個營隊沒意外都會固定在寒暑假辦,我自己覺得有進 APAC 或是 WF 然後又想要拼個好成績的話可以報報看,不能說一定會有用但至少對於一個喜歡打比賽的人應該還是會蠻享受的。

關於團練直播

之前準備 WF 的時候為了方便檢討我有在我的頻道直播我們的團練。我之前大一的時候無聊的時候會去翻 ckiseki 或是 waynedisonitau123 的直播看,感覺多多少少有學到一點東西,所以有人有興趣的話可以參考看看。但建議不要先看 WF 的,不然會被爆雷 XD。

後話

寫完覺得比我想像中長好多,丟字數統計發現有超過 10000 個中文字,可怕。

總之還是希望台灣 ICPC 能打出越來越好的成績吧,希望以後 APAC 能越來越多隊伍進,然後也希望有一天能有非台大交大的隊伍進 WF ><