讀題敘 -> 看輸入 -> 確認範圍,是否能暴力解-> 二分搜? -> 猜演算法 -> 有信心?
有 -> 直接實作
沒有 -> 寫個暴力解,看能不能撈分 or 悟出什麼東西
尤其是區賽 請先看看範圍,因為常常沒出到理論最佳解
千萬不要和 Mingyee 一樣燒
assert
因為區賽常常出錯題目 所以先驗證題目有沒有問題(用 RE 判斷)
當然也可以用這招作假解
回頭譴責某 TOI
邪教,但有試有機會
舉例來說,時限為一秒
如上,題目是給個陣列,找出最大差距。
我們開了個變數 ans_for_now
表示 目前找到最大的答案 ,並且在時間快到的時候再輸出答案。
雖然可以用 greedy 在 時間裡完成
cms 建議使用 mt19937
#define int long long
不知道哪邊要改 long long
?
那就全改ouob
遇到這種狀況:
或是:
恭喜你獲得了傳說中的 RE
有可能…
while
沒有中止但錯誤訊息只有這樣是要怎麼 debug ??
.at()
如果你使用的是 vector
或 deque
可以將 f[i]
改成 f.at(i)
這樣程式在呼叫時會先確認你是不是有戳出去,有的話會直接將程式中止,並輸出以下訊息:
__n
是你呼叫的數字,上面的意思是說你呼叫了 f.at(3)
但 f
只有 項。
注意:
如果你呼叫 f.at(-1)
你會獲得:
偷吃步
Ctrl + H 將[
取代為.at(
; 將]
取代為)
但如果今天不是這問題呢?
遞迴過深? 條件沒寫好?
究極黑魔法
首先,編譯你的 code
你會獲得:
然後提示輸入命令
l
list
列出程式碼b
breakpoint
後面接行數,程式執行到這裡會停下來p
print
後面接變數名稱,輸出該變數現在的值i b
info breakpoint
顯示目前建立了哪些中斷點i s
info stack
顯示函式呼叫狀況大概長這樣
r
run
開始執行程式c
continue
停下來後,繼續執行程式n
next
停下來後,繼續執行完一行s
step
停下來後,繼續執行一步而剛剛講到,正常執行時錯誤訊息有等於沒有,現在使用 gdb
執行一次看看:
獲得這咚咚,是 STL 內部函式出錯,我們使用 i s
追蹤問題出現在主程式第幾行
可以看到在 #3
這邊行數停留在 行,因此問題出現在這裡。