整理一下我自己用過、教學會帶到的主流 Online Judge。這個列表參考我以前家教教材的順序,從入門到競賽向都有,後面也補了幾個 slides 原本沒列但值得知道的。
適合想入坑 CP,或是已經在練但不知道下一步該去哪的人。
什麼是 Online Judge
簡單講就是線上幫你執行程式、餵測資、判斷對錯的平台。測試資料會有公開的範例跟隱藏的,公開的讓你知道輸入輸出長怎樣,隱藏的拿來真正評分,這樣你才不能寫死答案。
送出一份 code 之後,OJ 會回一個 verdict。verdict 會隨著不同 OJ 有小差別,但主要就這幾種:
- AC (Accepted) — 過了。你的程式在所有測試資料都跑出正確答案、也沒超時、沒爆記憶體。
- WA (Wrong Answer) — 答案錯。你的程式輸出在部分測試資料沒有對上平台預期的正確答案。
- TLE (Time Limit Exceeded) — 超時。程式執行時間超過題目限制(常見是 1 ~ 2 秒),通常代表你的演算法複雜度不夠好。
- MLE (Memory Limit Exceeded) — 記憶體超用。程式佔用的記憶體超過題目限制(常見 256 MB),通常是開了過大的陣列或無限遞迴。
- CE (Compile Error) — 編譯錯誤。程式根本無法被編譯,通常是語法錯誤、忘記 include header 之類的。
- RE (Runtime Error) — 執行時錯誤。程式跑到一半崩潰,常見原因是陣列 out of bound、除以零、stack overflow。
國內 OJ
台灣 OJ 主要受眾是高中、APCS、TOI 圈的學生。題敘多為中文,對剛學程式的人比較友善。
GreenJudge
最入門的選擇,題敘中文、題目偏重語法實作,比較少演算法思考。如果連 if/else、迴圈都還在熟悉,從這邊開始很適合,能很快累積成就感。
ZeroJudge
題庫最豐富的台灣 OJ,題目從很簡單到中等都有。題目較雜亂,沒有特別整理的順序,但簡單題很多,適合練手感。APCS 考古題也在這邊。
TIOJ
難度跳一階,大多是競賽題,包含很多 TOI、北市賽、各高中校內賽的題目。比較適合已經有基礎、想往競賽方向練的人。
TIOJ 偶爾會有系統狀態或 submission 速度不穩定的問題,當作競賽題庫使用會比當作新手主練場更適合。
國外 OJ
真正想練 CP,這幾個是必備的。
Codeforces
全球 CP 社群最大、最重要的平台。幾乎每週都有比賽,常見類型包含 Div. 1 / Div. 2 / Div. 3 / Div. 4 / Educational Round 等,Rating 系統從綠到紅都有,從入門到頂尖都有題可以做。
認真練 CP 就 Codeforces,沒什麼好挑。題目品質、editorial、社群活躍度都非常強,幾乎是現代 CP 最重要的主戰場。
日常比賽偏構造題、思維題比較多,這類題目的缺點是技巧比較不容易直接套到其他題上,搭配 AtCoder ABC 後段題或 CSES 補經典技巧會比較平衡。
進階功能還有兩個值得知道:Gym(歷年訓練 contest、區域賽考古、各種題單,題庫量很大),跟 Virtual(可以模擬參賽歷史比賽,按當下排名計算你的表現,自己模擬 ICPC 或追進度都很適合)。
AtCoder
日本系,題目偏思維跟數學,品質非常高。三個主要比賽系列:
- ABC (Beginner Contest) — 適合入門到中階,通常約 7 題,從很簡單一路到需要完整演算法思考的題目。後段題(E/F/G 等)模板偏多、經典技巧覆蓋廣,學到的東西很容易套到其他題
- ARC (Regular Contest) — 中階到高階,傳統上偏思維題;2026 起 ARC 主要回到 rated 1200–2799 的格式,另外也有 ARC++ / ARC-- 這類分級版本
- AGC (Grand Contest) — AtCoder 最高難度系列,題目通常非常重思維與構造
另外 AtCoder 有一個 Educational DP Contest,26 題涵蓋大部分常見 DP 模式,是練 DP 的經典教材。
LeetCode
面試導向。題目偏經典演算法,難度中等,分類清楚,也有公司 tag、題單等面試導向資源(部分功能需要 Premium)。Weekly Contest + Biweekly Contest 兩場線上賽。
LeetCode 跟 CP 是不同方向。CP 重視思維深度跟比賽臨場,LeetCode 重視題型熟練跟手速。當然 LeetCode Contest 高分段也很競技,但主流使用情境還是面試準備。
其他值得知道的
這幾個原本 slides 沒列,但都蠻重要:
CSES Problem Set
芬蘭出品的結構化題庫,收錄數百題,分成 Introductory、Sorting and Searching、Graph Algorithms、DP、Range Queries、Tree Algorithms、Mathematics 等主題。裡面包含大量模板題跟經典技巧的硬用,強烈推薦認真練 CP 的人要刷過一輪,把基本工具吃進來。
USACO
美國高中 OI 系統,分 Bronze / Silver / Gold / Platinum 四級。USACO Guide 整理得非常完整,如果想跟著一個有結構的進度練,這是很不錯的選擇。題目本身難度也夠,到 Platinum 等級已經是頂級水準。
Kattis
很多 ICPC 訓練、部分區域賽跟校內賽會使用或參考的平台。題目風格偏 ICPC:題敘較長、輸入輸出格式細節多、實作與邊界條件很重要。準備 ICPC 的話會接觸到,平常不太會主動去刷。
Project Euler
數學導向題庫,跟一般 CP 風格差很多,更偏數學觀察、公式推導與寫小程式驗證想法。喜歡數論、組合數學的人會很愛。
SPOJ / UVa(古典 OJ)
十幾年前的經典 OJ,題庫年代久、風格不一,現在比較不像主流日常練習場。但很多經典題跟教材上的解題範例還是會引用 UVa 編號。當作參考性質知道一下就好。
中國 OJ
2000 年代到 2010 初,POJ / HDU / ZOJ 是中國 ACM 圈三大主流,當時很多經典訓練題都從這幾家來,台灣老一輩 ICPC 訓練也常用。現在活躍度大幅下降,但如果是競賽向,題庫深、經典題多,特定主題的硬訓練(圖論、字串、數論專題等)還是很值得刷。
- POJ(北京大學)— 圖論、數論題庫經典,但 server 經常掛、SSL 過期,現在多半透過 Vjudge 抓題
- HDU(杭州電子科技大學)— 介面停在 2000 年代,但每年暑假的杭電多校仍是中國 / 台灣 ICPC 校隊集訓的重量級項目
- ZOJ(浙江大學)— 中國最早的 OJ 之一,題風嚴謹偏冷門,後來維護不穩定,存在感已大幅下降
現在中國這邊比較活躍的是洛谷跟牛客:
- 洛谷 — 中國 OI 主流訓練平台,題解質量高、社群活躍,整合了 Codeforces / AtCoder / UVa 等國際比賽題目並提供中文翻譯,是現在很強的刷題入口
- 牛客 — CP + 面試題混合,類似中國版的 LeetCode + Codeforces。寒假 / 暑假多校集訓系列賽事質量很高,題風貼近現代 ICPC
Vjudge
嚴格說 Vjudge 不是 OJ,是一個 virtual judge,它把 POJ、HDU、ZOJ、Codeforces、AtCoder、UVa、SPOJ 等十幾個 OJ 的題目聚合在一起,可以透過同一個介面整理跟提交多個 OJ 的題目。
最大的價值是組訓練 contest:可以混合不同 OJ 的題目開私人比賽,這在 ICPC team 訓練時超實用。我們以前也是用 Vjudge 開模擬賽。如果想刷中國系 OJ 的題目,從 Vjudge 進來體驗會比直接用 POJ 的網頁好太多。
大廠程式競賽
這些以前都是 Big Name 級的全球比賽,現在大部分已經沒了:
- Google Code Jam / Kick Start / Hash Code — Google Coding Competitions 系列,2023 年正式收尾並停辦
- Meta Hacker Cup — Google 系列收掉之後,這幾乎是大廠裡僅存還在辦的全球性 CP 大賽。題目風格偏實作跟極端測資,門檻不低
提一下是因為這些比賽當年很多人靠它累積知名度跟拿到 offer,包括我自己也是因為 Kick Start 成績被 Google 邀請過。可惜這條路現在大部分都走不通了。
怎麼選
依目標,我大概會這樣建議:
- 剛學程式 / 高中生入門:GreenJudge → ZeroJudge → AtCoder ABC
- 想認真練 CP / ICPC 方向:Codeforces 是核心,AtCoder ABC 後段題模板多、技巧好套用,ARC/AGC 補思維深度,CSES 補基礎,TIOJ 練台灣競賽題
- 準備外商面試:LeetCode 為主,刷分類題 + 打 weekly 維持手感
- 純興趣 / 數學味:AtCoder + Project Euler
我自己的習慣:Codeforces 是日常主練場,AtCoder 補品質高的思維題,LeetCode 偶爾打 weekly 維持手感。其他幾個是教學或補特定主題才會用。