###### tags: `OI` # OI競賽策略 ## 賽前做的事 1. 前一天下午開始練模板 & 耍廢 2. 早餐吃水煮蛋或茶葉蛋,買3~4條巧克力 3. 裝滿 2000 ml 的水 4. 再次熟記模板 & 對拍器(見note) ## 賽中做的事 以下令 $n$ 為題數。以 $5$ 小時競賽策略為主 #### 比賽開始 1. 設定codeblocks (settings -> compiler) - C++ 11/14/17 (看CMS是哪一種) - 開warning - define HNO2 2. 打模板 3. 看電子 & 紙本題目,然後把題目大意整理在白紙 or 題本旁 - 通常會一樣, 除非特別提醒, 否則以紙本為主, 再大概檢查電子版是否一樣 #### 以上事情做完約花 30 min 4. 每題先各想 $k_1$ 分鐘,把每題解題關鍵 (可能的解題大方向) 寫在白紙 or 題本上 - $n=3$ 時 $k_1=15$ , $n=4$ 時 $k_1=10$,$n=5$ 時 $k_1=8$ #### 以上事情做完約花 70 min 5. 如果有已經想到解 (滿分) 的可以先寫,穩定心情,反正沒有實作的到時候還是要實作 6. 假設剩下 $m$ 題 (還沒滿分的),每題交替想 $k_2$ 分鐘(以滿分為主,但是可以用subtask輔助思考),過程中估計每題實作時間總和 $t$,在第 $200-t$ min 前極力想題目 - $m=2$ 時 $k_2=24$ , $m=3$ 時 $k_2=18$,$m \geq 4$ 時 $k_2=12$ #### 以上事情做完約花 230 min 6. 估計剩下的時間來決定放棄那些subtask,拿到所有部分分 #### 比賽結束 ## debug相關 ### WA 1. 再驗證一次想法是否正確? 2. 特殊情況 ($n=1$,$k=0$, $>$ 跟 $<$, $<=$ 跟 $>$ 的差異) 3. 再檢查一次所有步驟是否都有做到 4. 如果要維護很多東西,檢查有沒有所有東西都維護到了? 變數名稱有沒有寫錯? 5. 檢查遞迴式函數名稱是否正確 - dfs函數 6. 檢查有沒有overflow(尤其需要mod大整數的題目) ### TLE 1. 再次檢查時間複雜度是否正確 2. 壓常數技巧 - 節省解答步驟 - 把遞迴函數改成迴圈 - 把STL容器改成 array(如果可以) - 輸入輸出優化 (不建議) ### RE 1. 檢查有沒有out of bounds - 線段樹有沒有開到 $4n$ ? - 檢查每個 maxn 的大小是否足夠 ### ??? 1. 如果真的找不到再用對拍器 (見note) ## Notes 1. 不要習慣吃東西,會干擾思考。但是要盡量上廁所 2. 口罩開賽的時候就可以拿下來了 3. 對拍器code ``` set -e g++ -std=c++11 me.cpp -o me.out g++ -std=c++11 ans.cpp -o ans.out while [ 1 ] do ./testgen.py > testcase.in ./me.out < testcase.in > a1.out ./ans.out < testcase.in > a2.out diff a1.out a2.out echo "Accept" done ``` 4. 最重要的還是穩定心情,好好享受題目,不要想部分分拿不到或是其他壞事。比賽加油 OwO ![](https://i.imgur.com/A7qzdSm.jpg)