Gino's Blog

從 Scratch 開始的資工之路

0%

2022 ICPC Regional 桃園站

大學競賽生涯的第一場大比賽,發個文紀錄一下,順便翻新了一下 Blog(好久沒寫文了)。

內文包含近期比賽紀錄、心情札記還有 Regional 比賽狀況。

成績

Contest Score/Total Rank
新生賽 520/600 2
年度賽 12/13 5
NCPC 6/14 21/佳作
TOPC 3/9 61
Regional 7/13 22/銀獎

NCPC/TOPC

本來開學的時候我是抱持著隨緣的心態面對今年的賽季,才剛升大一而且很強的學長姐或同屆非常多,感覺隨時都會被刷掉。

沒想到年度賽的時候發揮超常表現,封版之後逆了四題上去,就這樣意外得到了參加 NCPC 的機會。

不過接下來的 NCPC 跟 TOPC 都打得非常慘,雖然 NCPC 有拿到 Regional 參賽資格(門檻很寬鬆),但兩場比賽都是交大墊底,TOPC 還直接摔到第 61 名。

這兩場打爛都是因為被相對簡單的題卡住就沒什麼心思想其他題。

TOPC 最慘,比賽只有三小時,戳了 7 題結果有 4 題出 bug,pB 是線段樹懶標初始值沒設好,pH 是因為不知道 Python 乘法是用 Karatsuba 以為是 $O(n^2)$ 結果就卡住不知道該怎麼辦(我們還沒有 NTT 模板),pG 初選出過一模一樣的題目,只是太晚才讀題所以來不及寫完。

我發現我打三小時比賽的表現 <<<< 五小時比賽,給我五小時我可以想出較難的題目,但我真的沒辦法那麼快就把水題寫掉,猜是因為做題太少導致沒辦法看到水題就反射性地想出毫無瑕疵的做法。

NCPC 跟 TOPC 之後陷入了情緒低潮,打完 TOPC 的當下只覺得很丟臉,認為年度賽晉級純粹是運氣好,完全不該得到 Regional 資格。而且不光是因為比賽沒打好,還因為碰到期中週,心態還沒調適過來就又有期中的壓力,所以那陣子常常藉口要讀期中而缺席 PCCA 的團練,其實一半的原因是因為我在逃避比賽的挫敗感。

情緒還沒有完全恢復,Regional 很快就到了。已經一個多月沒有寫題目,所以沒有抱任何期待,連銅獎有沒有機會都不知道,內心一直想逃避這場比賽,結果焦慮到正式賽前一天失眠到凌晨 4 點多,只睡了兩個小時。

Regional 正式賽當天

早上還好有喝咖啡,開賽前一小時精神就上來了。

本來心裡一直想逃避,但是真的到了比賽會場後,也許是被周圍的環境感染,大家都很開心地聊天、認親,有跟台大的、海大的、Code Community 還有其他認識的人打到招呼也寒暄了一下,焦躁不安的感覺很快就消失了不少,當下只覺得這裡真的好棒,有冷氣、場地乾淨、鍵盤敲起來很舒服、現場氣氛很歡快…一切都很舒適,我告訴自己要好好享受這場比賽,畢竟一年就只有這麼一次。

開場之後我跟 Ian 讀題,Benson 設定 .vimrc 還有 shell 檔,pM 讀完後發現是並查集裸題,但在這之前 Ian 就說 pA 也是簽到題就上去寫,我讀完 pM 之後就去讀其他題。

他寫了 10 分鐘後我覺得不對勁,拿了題目來看,狗幹打表題,馬上跟他要了 coding 權把 pM 開掉,這時候他去讀其他題目。

我開 pM 的時候 Ian 讀完 pC,水題,直接開掉。

pG Benson 開掉之後,跟 Ian 一起打表開掉了 pA。

到這裡過了約 1 hr,進入停滯期。

Ian 拿給我看 pJ,想法不難只是 case 有點多,那時候 Benson 還在想 pB、pF,所以我就上去先寫 pJ。

寫完 BIT 後,Benson 說他 pB、pF 有想法,我這時候剛好卡在分 case 的地方,所以換他上去寫,我到旁邊把 pJ 的 case 分清楚。

結果 Benson pF 吃 WA QQ,pB 也吃 WA,他在修 bug 的時候跟他要 pB 來看,發現我不會用排組推公式所以試著用 DP 做。

做到一半遇到瓶頸之後(DP 轉移卡在某個地方),他剛好也遇到瓶頸,所以就換我上去繼續寫 pJ。

2 hr 到 3 hr 這段時間我們就這樣交替寫、交替 debug。

大概 3 hr 的時候把 pJ 寫完了,丟上去一發 AC。

AC 之後就繼續想 pB,結果我跟他同時想到 DP 作法,只是狀態完全不同,因為 Benson DP 很強所以就交給他寫,以他的想法為主。

(小插曲,pB 後來公告範圍從 $10^6$ 改成 $10^9$,北市賽 2.0 =w=)

後來 Benson 發電,pB 成功 AC。過快半小時也把 pD 開掉了,其實 pD 只是題敘很長,應該要早點讀。

在這之後進入燒雞期,Ian 大概從 2 hr 開始就在寫 brianfuck 那題,持續手刻 brainfuck 沒有跳題,Benson 還是找不到 pF 的 bug。我戳了記分板才發現 pI 一堆人過但我們根本還沒讀,所以我跑去戳 pI,此時剩 70 分鐘,coding 權在 Benson 手上(debug pF)。

接下來是整場耍笨最嚴重的地方。剩 50 分鐘的時候終於讀完 pI(可是讀錯題目,沒發現),跟 Benson 要了 coding 權寫 pI,寫完之後吃 WA,重看一次題目發現 D box 跟 G box 搞反,修了之後又重新測,這次是連範測就錯。回去讀題目發現漏考慮一個重要條件:

“One D box may overlap with multiple G boxes, but only one of the them can be counted.”

結果又傳了一個假解上去,這時候剩下 15 分鐘才終於想通這句話的用意。

這題其實是二分圖匹配

我在搞 QQQQQQQQ

剩 15 分鐘 Benson pF 還是 debug 未果,Ian 這時候終於寫好 brainfuck,換他上去寫,結果吃 WA,超級慘。

最後比賽就結束了。

結語/未來目標

Regional 這場很可惜,我們太晚進入狀況,題目也沒有提早閱讀,導致一堆簡單題就這樣被放到後半場,甚至是想到作法但來不及寫 (pI 的二分圖匹配)。

雖然只拿 22 名但還是遠超出我的預期,因為 TOPC 之後我真的對自己一點信心都沒有。

比賽結束後很開心,有好好享受到比賽,還認識了不少人(成大、海大、Code Community),唯一的缺憾是那天完全不餓,點心只吃一些豆皮壽司跟兩包堅果 QQQQQ

大學第一年賽季暫時告一段落!

接下來等這學期的期末結束之後,寒假、下學期打算把重心放在競程上,只修最低限度的必修選修,剩下時間我決定拿來練題 + 補不足的知識點。希望第二年能抱一座金獎或是爭取到出國打 Regional 的機會!

列一下明年賽季之前要完成的目標:

  1. Codeforces 橘色/AtCoder 黃色
  2. 搭配 IOIC 講義把技能樹點滿,具體該練哪些之後會安排
  3. 把之前 virtual 的比賽還有這幾場題目補掉

大三之後也許會有更重要的事要做,所以現在可能是能高強度練競賽的最後機會,希望不要再重犯高中的錯誤,不要留下任何遺憾!

照片們