NPSC 2022
*12/5 UPD:初賽 F 的部分翻完 submission 截圖才改成比較貼近事實的細節
最近有點多比賽還沒檢討,包含 NERC 2021-2022、SWERC 2021-2022 跟剛剛打的 IOI ‘15 Day 1, 不過 NPSC 算是繼區賽之後重要很多的大比賽,而且全國賽也快到了,趁著記憶新鮮來檢討一下。
初賽
賽前沒想到南一中今年會只剩我們這隊,所以就借不了電腦教室來打了, 初賽的策略是我先從最後一題開始看,然後高嘉泓從 A 開始看,
初賽可能沒有那麼刺激還有其實我有一點點忘了,所以下面可能會寫得簡略一點,
一開始我們先看到了 G,發現是一題裸的二維 DP, 做完兩個前綴和就寫掉了,
9 pG +
過了之後高嘉泓跟我說 D 是水題,所以他就先去寫 D,寫完不久就過了,
13 pD +
B 其實我有一點點忘記了,不過應該也是順順的寫就過了
29 pB +
之後高嘉泓去做了 C,他跟我講完想法我覺得很合理,結果寫完就在範測 WA 了, 問題出在我們不知道前面有多的可以換得這件事之後,要怎麼用他們構造出更好的解,所以我看著芒果那一隊開出 F 之後就去看了 F,
F 一臉結論題的樣子,因為高嘉泓裝弱說他不會賽局,所以就由我這個數學笨蛋來開這題。 所以我就隨便打表亂耍笨就傳上去吃了一個大大的 WA
94 pF -1
推一推想說不太可能錯吧,所以我就把我的打表從二維變成三維,然後 claim 了另一個結論又吃了大大的 WA。
99 pF -2
然後我就做了一樣的事情,把表開成四維然後再 claim 了一下,覺得不放心再改了一次, 後來開成五維靜下心來好好推之後就想到了一個很棒的結論,但我不確定他到底是不是好的,所以就被友慫恿傳了兩個更大的 WA
109 pF -3
110 pF -4
最後就知道答案了可是我又更笨吃了一個 WA,
116 pF -5
119 pF +5
我們這時候想說我們 penalty 已經吃爆了,接下來就只能拚題數了, (不過四題應該還是會進決賽吧)
PixelCat 那隊很早就開出我們沒做出來的 C,但我們想了一下又沒想到什麼就去想了接下來有人開出來的 A,
一開始我只有想到
186 pA +
後來我看了 E 有一點點東西但感覺離可做還差的很遠,所以就想全力做出下面也有些隊伍過的 C, 猜了很多解之後都發現有反例,是最後高嘉泓發現只要把剩下得都 greedy 換就會過,不用管能不能換, 我覺得有點唬爛可是下面的人都過了,應該可以相信砸個一次,然後砸下去就得到
230 pC +
高嘉泓好扯,orz。
團練
在初賽到決賽之間的這段時間,我們擠出了三個五小時打了幾場 ICPC, 基本上 code 在寫有時候是我跟高嘉泓各半,有時候是我佔了 70% 左右, 題數基本上都是還算可以接受的範圍,該開出來的大概少個一題左右, 很多時候 penalty 都是錯在實作出包,只有一兩次是假解,所以我們賽前擬定的策略就是我們不一定會輸題數,但我們很可能會輸 penalty,所以不能太亂傳。
題外話就是很多 ICPC 題目其實蠻酷的,雖然 codeforces 上面的難度有點爛掉。
決賽前
住宿
決賽剛好撞到段考,超怪,為什麼會有學校想要把段考辦在周末。 這年剛好競賽都撞到一些奇奇怪怪的東西,不過最後還是請到公假前一天考完搭火車上台北了, 到了台北之後火車誤點 19 分鐘,然後我們又坐特別晚的,所以九點半的時候我們才出月台,到處都沒東西可以吃了, 我突然想到麥當勞應該可以外帶而且很快,趕快找了最近的一家過去, 結果就是我不會三維計算幾何,所以我們就要再進北車繞到地下街再過去,到的時候還有十分鐘就關門,但我們還是順利買到了,就在捷運站外吃完去師大會館住宿。
該不會比賽已經開始然後我們從住宿就已經輸光了吧。
到站之後直接開始走錯路,還好一分鐘後就發現了,然後就多災多難的到了師大會館等他慢慢開收據之後進去住。 師大會館其實蠻簡陋的,不過價錢很低而且我們只是要去比賽其實還好, 晚上我睡覺的時候有被蚊子吵醒,不過我就直接覺得沒差啦睡覺比較重要所以就繼續睡了, 早上起來我可能太緊張比鬧鐘還早起來,所以就想先寫出發前想到的 Codeforces 1753D The Beach,然後等高嘉泓起床。 他起床之後才說他晚上都沒睡好,然後我就心想搞不好我們真的從這時候就開始輸了,然後一邊一發過 The Beach。
賽前
走到會場其實蠻順利的,到了放完東西之後就看到一個人在等隊友的芒果,然後就跑去膜拜各路電神順便預測芒果穩前兩名。
測機的時候我們直接被抓到不會用 Sublime Text,所以就趕快找找看 DevC++ 有沒有可以用 C++17 跟 PBDS 的編譯器,
最後是發現在 C:\\msys2\usr
裡面有(C:\\msys2\mingw64
跟 clang64
都是空的,到底怎麼回事),而且 judge 也很棒的不讓我們吃 CE,雖然我不知道我為啥可以兩題都 WA 超多次就是了。
我們測出來的速度大概是 rand()
),但 PixelCat 說他們測出來
決賽
剛拿到題目高嘉泓先看,我先改 compiler 跟打 default code, 結果沒想到的是過了 10 分鐘都沒有人開任何一題,這時候高嘉泓跟我說 A 是一題數學,
pA
輸出。
我一看就發現
17 pA +
不久有人開 H,所以我就去做因為他好像有點偏數學,
pH
給定
構造長度為的兩個正整數序列 使得 最大跟最小。
完全沒頭緒,所以我就先亂 claim 了
58 pH -1
我就豪不猶豫的印出來 debug,然後我抓到我很有可能構到不想要的解, 另一邊高嘉泓說他會 D 了,
pD
給定顆紅球、 顆白球、 顆紅球、…、 顆的交替序列, 問有多少區間內的紅球跟白球與區間外相同。
所以我跟他就交替把兩題弄出來, 等他有點卡住之後我就直接上去改了另一個湊解的方法,
76 pH -2
這段時間真的很痛苦,尤其 H 是一題我摸不著頭緒的題目,然後高嘉泓似乎狀態也不太好, 比賽已經果一小時連兩題都沒開出來真的是有點慘,不過比賽的經驗告訴我心態要穩住, H 後來應該是又改了一下下,結果一樣吃了大大的 WA。
96 pH -3
這一個半小時的狀況大概是我一直找不出哪裡爛掉,然後高嘉泓也一邊找不到他的 bug 在哪裡,
我原本提了我們兩個要不要換題目做或是跳題,但我後來想到了另一個一定會找的到作法,
就是我就想到可以透過枚舉差多少個
111 pH -4
吃 WA,而且是瞬間就吃的那種,所以我很快就回去看我的式子發現到處都是錯誤,一大堆 max
打成 min
的,超雷= =
雖然改了之後,我還是沒改到致命的錯誤。
115 pH -5
另一個錯誤是我判斷可以多塞到多少的時候是算到
119 pH -6
然後我發現我構解沒改到,有夠蠢。
121 pH -7
之後我就發現了這個致命的錯誤:
133 pH +7
我們直接從一題線頂變二題線底 XD
這時候我已經想說大概這場沒希望了,必須靠題數致勝, 結果我轉頭看向芒果那隊發現他們也只有兩顆氣球,趕快看計分板才發現全世界都在燒雞,我們還算沒有輸得太慘。
高嘉泓聲稱他做出 D 了,可是傳了之後沒過,
135 pD -1
後來是他發現他有漏 case,然後我一邊看著他在改一坨怪 code 一邊 debug,然後他又傳了一次
143 pD -2
這時候又有人過了 F,
pF
給定的網格,總共會直線跟橫線切 刀在格線上, 一開始整個是一大格,切過的格子會分裂,然後兩邊的格子內數字都會 +1, 給結果還原其中一種過程。
一開始我看怎麼都只有用 set
,在 judge 速度不太快然後 set
又很慢的情況下我不是很敢砸,
然後我突然想一想把他規成像括號的東西之後我就發現
「不是用單調隊列就做完了嗎」
然後我就很快寫完,最花時間的反而是驗解,然後我就傳了
158 pF +
做完我們直接起飛了,也太好笑
這時候高嘉泓還在燒 D, 我那時候趕快看了 D 就想到一個沒有 case 超級快的做法,就是把紅球當作 1、白球當作 -1,然後用雙指標跑紀錄路徑中遞增、遞減或持平跟持續的長度,然後再用加權總和跟連續性看有多少區間滿足。我覺得很乾淨所以我就直接把他的 D 搶過來重寫, 我不知道為什麼在找到一半可以燒一小段時間,不過改完一些小 bug 就很快過範測然後傳上去
189 pD +2
這時候心態跟節奏都回來了,然後接下來的選擇就是要做 B 或 E,
pB
有個人在打架,第 個人的能力是 ,你每次可以找兩個人上去打, 能力比較大的人會贏,但他的能力會減少另一個人剩餘的能力, 輸出活著的最後一個人能力最大是多少?並且回溯一組解。
B 的部分高嘉泓一直燒雞先是提出了背包要 bitset
做到
但我覺得有可能不會過,
E 的部分則是
pE
有一棵樹,你可以刪掉一條還存在著長度是質數的路徑上的邊, 有沒有辦法把整棵樹都拔光光?可以請回溯一組解。
很早就知道可以把質數拆成
? E -1
隊友跟我看過了一次 code 說可能是我沒初始化,所以為了保險起見我就加上去之後就
? E -2
這時候比賽剩 10 分鐘了,我們幾乎是在跟時間賽跑,
我先很快複製一份 code 之後弄了最大值確定沒問題,然後再弄了隨機對拍,我自己估計應該是回溯的時候配對出問題,所以我就直接開 assert
,然後果然在一筆
294 E +2
然後我們就去傳了一個 G 的 WA,假裝有在做。
賽後
一開始我們以為我們慘了,結果才發現 5 題的少之又少, 我們估計我們大概是三到四名左右,因為我們應該是 5 題線 penalty 最高的,壓制性的那種。
題解的時候真的覺得自己卡在 H 卡太久了,不然應該可以再開個一題左右,整場敗筆大概就是我的 H, 然後抽獎頒獎的時候超好笑,
- 高嘉泓抽獎去轉那個指針,🉐
- 有人在 A 砸線段樹被公審,超好笑
- 頒獎不小心爆雷,這樣我們的 G submission 就不好玩了 qwq
最後是收在 Rk. 4,Penalty 1010, 最想不到的是竟然輸第三名只有輸 4 分鐘而已,怎麼會這樣…
檢討
基本上我初賽複賽都敗給偏數學的題目,我在這邊可能太久沒打 CF 猜到結論猜很慢, 可能需要稍微加強這小部分,被 H 雷到沒做出六題真的蠻慘的… 還有我應該相信我的 B 然後先趕快寫掉才對, 我真的需要多練點程式恢復以前的水準甚至更往上加強,不然我就等著全國賽被揍爛吧。
下一站就是全國賽了,希望高中競程人生的最後一年可以有好的成果。