我今年高一,這是我第一年作為正選參加NOI。
去年NOI沒寫游記,結果前兩天想要復盤NOI2019的時候發現只能回想起一些模糊的記憶了。為了防止明年再遇到這種情況(其實我更希望沒有明年),就有了這篇游記。
也正是因為這個原因,本文將專注於考試本身,其他事情就不會怎么記錄了。至於經歷或目睹的其他事情,寫出來估計也難有人有共鳴,所以干脆省略吧。
考前的情況
考前幾周的模擬賽/其他比賽基本上都以各種原因掛掉了(很慘的那種),大部分時候是因為策略/考場行為上的重大失誤,偶爾是因為智障沒想出題。
總結了不少考場策略和注意事項,但不知道為啥總能花樣翻新地犯錯(偶爾也會舊錯重犯)。考前兩天終於意識到了最重要的問題:考場上不冷靜,心理活動太豐富;然后針對這兩點提出了一點改進方法。
筆試
考前一天晚上准備了一下,成功AK。
Day1
比賽之前
前一天晚上十一點總算完成了糊牆式的復習,早上爬起來之后又背了個快讀板子,默寫了一遍注意事項,就出發去考場了。
晚上十一點多一點入睡,早上四點多一點醒(然后就沒再睡着)。看起來有點離譜是吧,但對我來說還行了……我反正已經習慣考前睡不着覺了qwq。
比賽過程
00.5h:T1的讀題和思考。這段時間有點迷糊,不知道為什么注意力不太集中。過程中一度以為T1並非簡單題,在30min終於會做后感覺自己是沙雕。想完之后仔細確認了做法的正確性。
0.5h~1h:T2 T3的讀題和初步思考。T2很快想到是長鏈剖分或者線段樹合並,T3想出了三種特殊性質分別的做法(其中性質A想的是難寫的分塊而不是莫隊)。判斷難度順序是A->B->C。
1h~2h-:T1的代碼和測試。測試時發現自己忘了判-1。自覺進度有點慢,所以沒有對拍。
2h-~4h-:T2的思路細化、代碼和簡單測試。代碼本身似乎並不難寫,但寫了兩個有點隱蔽的bug出來,結果調小樣例調了很久。本來預計3h出頭時能弄完,結果弄到了接近4h。因為時間緊張,過了大樣例之后就沒對拍,甚至沒顧得上瞅一眼大樣例強度。
(考場上我的判斷是:區分度主要集中在第三題,所以第三題需要拿到可觀的分數才能夠到隊線。因為如此所以在做前兩題時沒有花時間去換穩定性。)
4h-~5h:肝T3。嘗試了一兩個思路后認為正解不可做,然后提出了性質A的莫隊+BIT做法,接着發現能用四維莫隊+BIT做一般情況。認為四維莫隊性價比最高,剩下的時間都在寫它。當時的判斷是:寫出來四維莫隊,性質A的分就都有了(因為四維莫隊全方面強於二維莫隊),無性質的分也能拿不少。最后10min 又Rush了一個性質C,為了復用代碼,寫的是二維莫隊+BIT。12:58終於把tears.cpp
放進了提交文件夾里,驚險刺激。
后話
100+100+48=248,前兩題順利AC,T3丟掉了性質C和大部分性質A的分數(A是因為忘記針對二維莫隊改塊大小,C原因未知),但因為出題人卡不掉結果意外拿到了性質B的分數。
官宣rk50的分數是240,但這50個人中包括IOI2020集訓隊還有DE類選手。猜測今天實際的隊線會在230左右。自己在考場上似乎把隊線估高了一點。
感覺今天的考試過程中冒的風險還是太大了。明天需要更謹慎一些。
Day2
比賽之前
考前放棄學習。
這次是十一點不到入睡,三點半醒,然后就沒再睡着。意外的是精神反而比昨天好。
比賽過程
0~0.5h+:T1的讀題和思考。嘗試分析連邊的圖的性質,但完全沒有靠譜的想法,甚至想不到任何一個非平凡的做法。
0.5h+~1.5h-:T2 T3的讀題和初步思考。T2看完感覺可能可做,推了一會兒性質就先丟掉了;T3看到弦圖很開心(考前剛學過弦圖),然而試了試自己了解的弦圖性質,發現都不太派得上用場,冷靜之后決定放棄。
到這時對難度有初步感覺了,判斷是CTS級別的難度,A掉一題估計就穩了,三題部分分也有希望。但目前為止一個靠譜思路都沒有,還是有點慌的。
雖然T2看起來更可做,但T1畢竟排在前面,還是相信一下組題人的良心吧。於是准備把剩下的時間大致平均地分給T1和T2。
1.5h-~2h+:這期間繼續嘗試了一些T1的思路,但都找到了反例。最后無奈決定把已經想出來的三個假做法合並取最優解。三個假做法分別是:
- 把原材料
random_shuffle
后從前往后貪心選。卡時重復多次。 - 欽定連邊圖(把菜餚看作原材料間的連邊)為若干菊花的並,對它決策。(狀壓DP,\(O(3^n)\)復雜度)
- 貪心,每次把當前的最小元素(指原材料)和最大元素匹配。
2h+~3h:實現了上述三個假做法,並進行了簡單測試。有一點細節且代碼比較長,但成功做到了幾乎一遍寫對。說“幾乎”是因為測樣例發現輸出部分寫錯了。
此時感覺自己這場已經涼了,但還要掙扎掙扎。
3h~3.5h+:繼續思考T2,兼顧部分分和正解。過程中覺得自己會正解了,吸取模擬賽教訓仔細檢查算法正確性,成功發現自己想題的時候把題意想歪了。不過仔細考慮一下,原來的做法似乎能魔改一下以適用於正確的題面。又花了一些時間繼續確認正確性和想清楚細節,直到基本確信自己能把它寫對為止。
3.5h+~4.5h:寫T2。比較順利,寫完一遍過樣例。
4.5h~5h:測了T2的極限數據,然后肉眼檢查了一遍T1和T2的代碼。保險起見開大了T2 trie樹內存池的大小。未發現其他問題。
后話
45+100+0,沒有掛分,T1得分超出了我的預期。
三天總分加上A隊加分,最終排名似乎是rk26。