這篇就主要說一下個人感悟吧,雖然不是金牌選手,但還是希望多多少少能對后來者提供些幫助
1. 預備
省選到 NOI 的准備,就當講講故事。
省選考下來好像不是很行,本來退役記都寫了一半了,結果發現省隊最后一名苟進去了 awa 隨后就是拋開一切准備 NOI。省選聯考固然難,但做過 NOI2020 的線上賽,也知道 NOI 和省選畢竟不是同一個等級的,做足了心理准備。
與其他競賽強校聯合訓練是准備 NOI 的主要方式,也就是一起打比賽,分享試題。省選時兩天一次測試,現在幾乎每天都考,訓練強度直接翻了倍。每天上午打比賽,下午晚上補題;題目難度要向 NOI 靠攏,補題的難度不言而喻,基本上一天也就耗在了補題上。再像以前那樣寫長篇大論的博客總結試題是不現實的,所幸自己一直保留着「刷題記錄」這種東西,記錄每道題的主要算法,再對這道題根據自己的收獲給出一個價值(是否需要復習、重做,或者重溫思路);實際上到訓練后期這種記錄就足夠了。
知道進入省隊的消息后沒過多久就去北京集訓,這是我第二次長時間外培。其實外培和平時的訓練區別就是“有一群人和你一起考試”,的確人多一些更有考場的感覺。到了外地,作息時間可能有 1h 左右的調整,需要先適應;不過更重要的還是適應考試環境。實話實說,外培講課的效果其實並不比線上視頻好,人太多根本不方便提問;一些人的解法可能和 std 不同,值得一聽,雖然大多數時候是半懂的狀態,但是至少還是要在腦海中留下一個印象——這道題可以這樣分析。
做比賽碰到的算法大多數是學過的,就當是復習。能寫的題就寫,其實也是復習一些模板(在之后敲模板題的時候有些算法就可以 skip 了)。
偶爾也會碰到沒學過的算法,聽評講肯定是聽不懂的,還好有 OI-wiki 以及其他博客。到 NOI 的階段,發現有一整塊知識缺失是不可能的,多數沒見過的算法都是一小點;如果沒有沖金牌的目標的話,這種算法就把比賽題補了就合適了,再拓展練習的話,一是大概率不會碰到,二是很難把握算法精髓,NOI 肯定不會考板子,即使碰到也不容易想到正解。
教練有時會讓我們研究一些論文,同樣的道理,不需要大規模練習。
2. 練習賽
本來想在前文就順帶說了的,但是看起來得單列一節。
練習賽不僅是做題,還要練策略。練習賽需要重視,但是畢竟不是正式比賽,可以拿來做實驗( ̄︶ ̄),比如聽說一種策略是「拼了命也要做出第一題」,可以試一試然后死得很慘。
練習賽是模擬正式賽,但有一說一,和 NOI 差別肯定很大。NOI 試題有一個共同點是測試點分得特別細,練習題就很難有很細的部分分,而且還綁點╰(‵□′)╯。考下來分數肯定會集群,所以練習賽比較考驗某一個思路的突破,以及實現的精細。不管怎么練,始終記住正式比賽啥都不會寫的時候「部分分+亂搞」yyds。
多校聯訓總共六十多場比賽,越到后期越難,如果狀態不佳,連續幾場考爆是常有的事。聽到家長說「看你們這些競賽生都已經考麻木了」,實際上只有外人會這樣認為。最后十場練習賽連續爆炸,每次考完看到自己的分數,覺得「可能就這樣了,無所謂了」;但是中午躺在床上腦子里就只剩「真的無所謂了嗎?憑什么我學了這么久,憑什么我都沖進省隊了,還是考得這么差?」;摔東西、砸牆、長跑……獨自一人發泄一通,似乎又好了,告訴自己「明天一定要 200+,再拿一次 rank1」。自言自語在人群中不太好意思,但一個人的時候久不必要隱瞞了。每次自己從「期望后的失望」中回復過來的時候就會想起一首歌:
給我 點時間就好
讓我 安靜地墜落
請不要擔心我
並不需要太久
然后裝作
沒發生過
——《難過 233 秒》
大概就是這樣吧。
終於在最后一次練習賽時,整個人放開了,啥都不管放開了考,得到了自己滿意的名次。
3. 臨考
NOI 就跟個夏令營一樣,任務安排特別寬松,給了選手特別特別多的時間。
NOI 臨考的時候最煩的是「不知道要干什么」,但是必須要找到事干,個人覺得勞逸結合是比較好的選擇。
考前不需要太壓抑自己,尤其是到了宿舍過后,一個人一直復習往往會把寢室弄得特別緊張,所謂內卷(´Д`)。喜歡玩游戲就玩,喜歡打牌就打,喜歡唱歌就唱(不要擾民⊙﹏⊙∥),只是每次 NOI 都把體育館給占了,打球之類的基本上不太可能,而且夏天比較熱。(這次 CCF 報道廳把乒乓球館占了(ノ`Д)ノ)
有句話說的好:「勞逸結合是不錯,但也別放松過頭」[doge] 適當地卷有助於保持自己的狀態。我復習主要是看自己的博客,還有把刷題記錄挨個看,主要復習思路。NOI 不太可能撞題,所以復習重點在「怎樣找到這道題的切入點」或者一些實現細節。
另外住在寢室里有個好處……如果是一個比較活潑的寢室(o゜▽゜)o,室友可能會在 Ta 發現某個神奇算法/思路的時候發出驚嘆 awa 雖然嘴上說着「NOI 要是考這個算法,我 ***」實際上很有可能一奶一個准_(:з)∠)_
4. 考試
考前啥都不想,唱首歌就上路 awa
不管 CCF 又出什么幺蛾子導致比賽延時,反正比賽都是 5h。開考后先通覽題,只要沒有去年 NOI2020 Day2T2 那種玩意,差不多十幾分鍾就能了解大概題意。此外注意數據規模。
然后不管哪道題比較有思路,反正按順序做,不會做就寫部分分。NOI 大概是按難度排序的,所以留給前面的題的時間還是得多些。T1 如果能想出來,思考+寫代碼 2h 對於一個銀牌選手並不過分;如果沒啥思路,頂多 1h 過后必須寫代碼,能寫多少寫多少;2h 沒調試出來,先保存着放一放,換 T2。T2 的策略和 T1 差不多,只是思考時間可以縮短一些,一定要給 T3 一些時間,哪怕是寫暴力也可能花費一些時間。
至於 T3,還是那句話,如果不是沖金牌,開局就看部分分。考前學會了一個看部分分的方法——分欄看。T3 的部分分往往是把每個測試數據的信息挨個列出來,表格長得離譜(。_。),但是可以看它每一列的特殊性,比如一些點的 \(n\) 很小,一些點的 \(k\) 很小,一些點有特殊性質……
寫完 T3,如果 T1 沒寫出來,現在就可以打回馬槍了(反正我 Day1 就這么干的)。調試的時候如果沒有合適的大樣例就寫對拍吧!比干瞪眼強多了。
考試結束前 15min,代碼一存,檢查:
-
文件目錄,文件名,文件輸入輸出;如果你不確定代碼放的位置,可以問工作人員;
-
數據規模,包括數組的大小和數據類型(long long);
-
編譯:O2 和 C++11 開和不開都要測一測,應該以后都會開 C++11 但還是要看清楚;編譯完測文件大小,MLE 和 CE 一樣慘;開所有你記得的編譯警告,盡管網上說只開
-Wall
就夠了,但是似乎有些東西比如-Wconversion
就需要單獨開;除了開了 O2 警告你
scanf/printf/freopen
的返回值沒使用這種屑警告,其他警告都要重視,尤其是:- 隱式類型轉換;
- 非
void
函數可能木有返回值; - 位運算的順序;
- 變量重名(養成好習慣( ̄▽ ̄)")。
-
用文件輸入輸出測樣例,eg:
cd qi g++ -o qi qi.cpp -std=c++11 -O2 -Wall -Wextra -Wconversion -Wshadow cp qi1.in qi.in ./qi diff qi.out qi1.ans -w
-
檢查代碼里是不是還輸出了中間變量,建議用
fprintf(stderr, "")/cerr
輸出中間結果,最后直接搜索fprintf/cerr
刪掉就行了; -
刪掉代碼里所有
assert
,盡管你覺得只要assert
掛了就會錯,但是如果加了assert
就肯定沒戲,刪了過后可能會出奇跡o(* ̄︶ ̄*)o
5. 結語
作為一個 OIer 的學習生活已經結束了,也僅能以一個退役學長的身份和后來者交流了。
自己瞎編了六個字送給現役或有意參賽的人:『慎始,篤行,善終』。