main 只做 I/O 與流程控制,核心邏輯封裝函數。malloc、fopen、scanf 返回值;陣列邊界檢查。max_size、count_valid、is_prime。printf 追蹤關鍵變數、或用 GDB/VS Code 除錯器斷點單步。valgrind --leak-check=full 檢查記憶體洩漏/越界。| 題型 | 核心模型 | 關鍵詞 |
|---|---|---|
| 排序/搜尋 | 比較/分治/雜湊 | qsort, bsearch, 二分查找 |
| 字串處理 | 有限狀態機/雙指標 | KMP, 字典樹, 滑動窗口 |
| 數學/數論 | 模算術/質因數分解 | 快速冪, 歐幾里得, 篩法 |
| 動態規劃 | 狀態轉移/最優子結構 | 背包, LCS, LIS, 矩陣鏈乘 |
| 圖論 | 遍歷/最短路/生成樹 | BFS/DFS, Dijkstra, Kruskal, 拓撲排序 |
| 位元操作 | 位遮罩/移位/異或 | 子集枚舉, 權限掩碼, 無進位加法 |
main 骨架:讀輸入 → 呼叫 solve → 印輸出,中間函數先寫 stub 回傳預設值,整體跑通再填細節。assert 守衛前置條件:assert(n > 0 && n <= MAXN);。printf 精確控制:%.2f, %04d, %-10s。static int a[1000000]; 避免棧溢位。**不會做也要動手寫**。哪怕只寫出讀輸入、定義結構體、空的迴圈框架,也比盯著螢幕發呆強。程式設計是**增量構建**的藝術:先跑通骨架,再填肌肉,最後修飾細節。