本單元重點回顧
查錯的第一原則:找會錯的測資,不是盯程式碼。盯 code 時,當初騙過你的「想當然」會再騙你一次;一組會錯的測資才是客觀證據。
標準流程:重讀題目 → 掃檢查清單 → 找錯測資(範例 → 手造 → 對拍)→ 模擬程式找第一個分岔點 → 修正並全面重新驗證。
警告參數常駐:
-O2 -Wall -Wextra -Wshadow每次編譯都開(未初始化的警告要開著最佳化才會出現),未初始化、無號比較、變數遮蔽在執行前就現形;警告是輔助不是保證(1e18 + 1的教訓)。檢查清單六慣犯:整數溢位(快篩
#define int long long)、陣列開太小/負索引、忘記初始化(多筆測資忘記重置是 APCS 大殺手)、=寫成==、整數除法丟小數、cin >>混getline。四種卡關情境各有嫌疑犯名單:OJ 才 CE 看完整錯誤訊息;範例 OJ 才錯查未初始化與輸出格式;RE 查中括號與除號;TLE 先估運算量再查死迴圈、
endl與同步。print 除錯用
cerr:另一條輸出通道,不混進答案、重導向不搗亂;印之前先寫預期值、每個值帶標籤;查完清乾淨或#ifdef LOCAL包住。範例過了不等於對了:極端測資清單——最小規模、最大範圍、全部相同、已排序、負數、邊界值——提交前自我攻擊一輪;大測資用程式生、寫進檔案。
(延伸)對拍三件組:直白到不會錯的暴力解+生小測資的亂數產生器+「產→跑→比」的主程式;抓到的小測資接回模擬辦案;一千輪全過是信心不是證明。
(延伸)assert 把信念變成檢查:範圍、中間狀態、對拍輸入合法性;爆掉時直接報行號,辦案範圍瞬間縮小。
查錯是可訓練的技能:每次 WA 都照流程走、修完都回頭理解原因,速度會肉眼可見地變快——這是比任何單一語法都保值的能力。