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