TOI 入營考訓練
臺南一中 曹宸睿
2021/2/27
TOI 入營考介紹
TOI入營考
1. 三小時五題
2. IOI 賽制(有部分分)
3. 無記分板
4. 題目不照難度排
1. 三小時五題
平均一題 36 分鐘
實作算 20 分鐘好了(實際更久)
讀 + 想的時間大約只有 15 分鐘
2. IOI 賽制
有部分分
不可以掉純暴力分
能撈就撈,能混就混
3. 無記分板 +
4. 題目不照難度排
看不到別人寫哪題
自己判斷題目難度
必備演算法
二分搜
BFS、DFS
基礎DP
基礎圖、樹的概念
STL 語法、用法
現在還不會?
DP是什麼,Double Play嗎?
Double Penetration
STL?那可以做什麼?
明年請早
不能說沒有機會,但是可能要等待奇蹟。
為什麼需要策略?
注意第 21 名到 40 名,點進去看詳細記錄
注意第 3 名,
點進去看詳細記錄
策略
僅適用 TOI 入營考
1. 掃過全部題目 排序難度
3. debug 寫大資結 假解 再看幾次0分的題目
2. 依照自己排的難度 由小到大拿可做分數
掃過全部題目
時間過半卻拿不到半分?
會寫但實作細節複雜卡bug?
這些情況常發生在
一題一題寫的人身上
TOI 初選通常有 1~2 題水題
先拿下來有助穩定心情與進入狀態
TOI 初選通常有 1 題大難題
先找到它,避免卡死在這題
開始時
先花 15 分鐘左右
看過所有題目並排序難度
不會浪費時間反正你本來就要讀題
除了簽到題,在這階段不要寫 code。
寫下去就停不下來了。
這幾天
請別人幫你出 5 題的 mashup 並試著排序難度
大部分人沒有相關經驗,
會發現這比想像的難。
但練起來不會太久,練好的效益又大。
依照自己排的難度
一題一題解
每題時間: 30 分鐘
超過就跳,一定要跳
不管你卡什麼奇怪bug
不管 TLE WA 還 RE
從窗戶跳下去
如果是想不到的話,5 分鐘 0 想法就跳吧
+ debug 時間最多 40 分鐘
思考流程
1. 觀察性質
2. 思考解法
3. 注意實作細節
4. 開始實作
觀察性質
N 多大 ? xxx 會不會過?
基本上 TOI 的題目會出到理論最佳解
要是你想了一個 O(N) greedy,但題目 N 只到 5000,你就要小心了,高機率錯。
各變數之間的關係是什麼?
某個變數特別大 / 特別小?
如果是一張圖,點數跟邊數的量級接近,可能就有可以利用的地方。
觀察性質(3 ~ 5 分鐘)
題目保證了一個性質,如果沒有這個性質,會發生什麼事?如果保證了某個很特別的東西(Ex. 圖上各點的最高度數) 90% 跟解答有關
為什麼題目只要求我做到這個東西?
Ex. 求樹上全點對距離 而非列出以每個點為根的深度
Ex. 求序列裡有多少個 0,而非求出其所有位置
如果題目只要求你做出這個,那多半是因為
只能做出這個
思考解法
(跟觀察性質加總起來共10分鐘)
跟小問題有關嗎?
管它的,先 sort 再看看
每次拿...好像會最好?
看範測,為什麼是這個答案?
抓住頭腦裡每一個飄過的想法
最好寫下來
思考解法
個人造化 + 解題經驗
大概沒有辦法教
睡飽,然後祈禱吧
想不到的話,試著構一筆稍微複雜的測資,觀察自己的頭腦如何解決它,很可能與解答相關
真的不行的話請務必跳題,不要卡死不要卡死不要卡死
小測資具有引導功能
從最小的subtask,一個一個往上想
10 分鐘內想到哪個 subtask,就寫到那裡。
實作細節(2 ~ 3分鐘)
需要用到什麼東西?
Ex. 需要單調隊列、BIT、線段樹
要用到的東西有什麼需要注意的地方?
Ex. 線段樹是否要push? 雙指標右界是否停不下來?
在開始打第一個字母前,就應該完全知道要寫什麼,而不是邊寫邊想
實作
考量自身能力,決定要不要當場刻某個資料結構或演算法。
視情況可以暫時用暴力取代資結,確保其他部分(想法、主程式)正確。
實作
了解你寫的每一行。
問自己:這行在做什麼?
bug 數量、debug難度
正比於 長度 * 亂度
資料結構、debug、假解
資料結構
線段樹、BIT、單調隊列...
難度在這以上的建議不要刻。
(treap, 動態開點, 持久化, 莫隊......)
能用 BIT 就不要線段樹,但仍建議有 15 分鐘刻出無bug 區間修改、區間查詢 min/max 線段樹的能力。
debug
幸運的話,不會遇到這個部分。
試試亂生測資,不要盯著code。
10分鐘找不到這樣盯也找不到。
但如果有,代表你已經在前面步驟 de 10分鐘找不到,決定跳過這題以後,現在才回來繼續。
debug
利用 judge。能不能偷測資?
(現在難度提升,因judge只顯示到你錯的第一筆測資)
想想邊界測資,某個東西 = 0 ?多試幾組。
時間很多的話,對拍?
暴力解可用judge上小測資確認正確性
(不建議,因時間通常不足)
分case傳?
n <= 5000 用暴力
(因大測資通常較弱)
假解
這裡的假解並非只指錯的解
而是「無法證明正確性」的解。
若無法確定自己解的正確性,
不建議在一開始就實作它,
可能會浪費一堆時間。
有個無法證明的猜想?
試試看吧!反正這是最後一個部分了。
大概也解不出其他題。
假解
很多人打codeforces會有一個壞習慣,
常常傳無法證明正確性的解,
糟糕的是,通常會過,因為cf很多結論題。
平時多練習證明自己解的正確性,不要讓judge幫你證明。
時間剪枝
#include<bits/stdc++.h>
using namespace std;
int main() {
auto st = clock();
while((clock() - st) / CLOCKS_PER_SEC < 0.87){
}
}
吃東西、喝水
與上廁所
三小時的比賽
血糖與腎上腺素基本上不夠用
需要吃東西
吃東西的時間點約是1.5小時左右
(開始感覺到餓的半小時前,建議先實驗,每個人都不同)
卡題了?上廁所
AC一題了?上廁所
WA?上廁所
RE?上廁所
強迫自己去廁所
廁所對於清空頭腦以及腸胃非常有幫助
盯著螢幕debug
< 盯著小便斗debug
喝水
2/27模擬賽
賽況與檢討
三小時五題
水題:B
難題:E
中等題:A、D
噁心閱讀+實作題:C
首殺 - chyenn
on pB 00:12
成功辨識 B 為大水題者:chyenn、victor.gao、st1254878
D首殺 - Biaz
00 : 47
chyenn 也在 00:52 解出
C首殺 - aruphoria
00 : 52
cmes31419 也在 01:08 解出
但第一題開這個並不是什麼好主意
chyenn 在 01:26 解出
是他的第三個 AC
pA狀況 -
Biaz在 01:08 拿下部分分
隨後在拿完 B 的部分分後對 A 砸下了線段樹
於 01:36 拿下兩個 WA
victor.gao在 01:08 拿下部分分
aruphoria 在 01:44 拿下部分分
pD狀況 -
cmes31419
在 01:24 時 WA on 25
換了寫法
在 01:33 時 WA on 26
可說是最慘情況
之後他決定換一題 明智的選擇
pA狀況 -
Biaz在 01: 46 debug 成功,拿下滿分
aruphoria 在 01:44 拿下部分分
cmes31419 在 01:53 試圖唬爛撈分 TLE on test 63
chyenn 在 01:52~01:54 上傳 3 次,未拿下分數
pB狀況 -
cmes31419 在 02:02 終於發現了這題1300的水題
Biaz 還沒發現
pD狀況 -
victor.gao 在 02:03 拿下部分分
aruphoria 在 02:07 拿下部分分
pA狀況 -
chyenn 在 02:18 AC pA
pE狀況 -
Biaz 16 分 (02:17)
aruphoria 37 分 (02:14 02:28)
chyenn 37 分 (其實應該是50啦) (02:32 02:38)
cmes31419 16分 (02:44)
總分
chyenn 437
aruphoria 337
cmes31419 316
biaz 2(3)76
victor.gao 200
st1254878 100
TOI
By emanlaicepsa
TOI
- 4,271