1.2 第一次提交線上評測系統(OJ)
在競程課程中,你寫的程式最終要提交到「線上評測系統(Online Judge, OJ)」來檢驗正確性。AA 競程的學生平常就是在 AACPOJ(本課程的 OJ)上交作業;其他常見的公開平台還有 NTUCPC Judge、TIOJ、Codeforces 等。
這一節教你怎麼提交,以及讀懂評測結果。
¶什麼是 OJ?
OJ 是一個自動評測程式的系統:
- 你把程式上傳
- OJ 自動編譯你的程式
- OJ 用預設的輸入測試你的程式
- OJ 比較你的輸出和預期輸出,給出判定
(編譯就是把你寫的 C++ 翻譯成電腦能跑的程式;這個詞 1.4〈工具介紹〉會細講,這裡先知道「OJ 會自動幫你做」就好。)
¶OJ 的判定結果
| 結果代碼 | 全稱 | 意思 | 原因 |
|---|---|---|---|
| AC | Accepted | 通過 | 你的程式對所有測試資料都正確 |
| WA | Wrong Answer | 答案錯誤 | 程式能執行,但輸出結果不對 |
| CE | Compilation Error | 編譯錯誤 | 程式碼有語法錯誤,編譯失敗 |
現在先認識這三個最常遇到的就好;其他像「超時」「超記憶體」等判定,等後面單元用到再介紹。
¶提交流程(以 AACPOJ 為例)
¶Step 1:找一個簡單的題目
我們用和 1.1 同類型的「輸出一行指定文字」題目走一遍提交流程,最適合第一次提交:
- AACPOJ 0hello:要你輸出
Hello, AACPSCHOOL! - NCOJ 501:另一個「輸出指定文字」的題目(換個評測系統練手)
(等下一節學會「讀入資料」後,你就能再去挑戰 A+B 這類要算東西的題目。)
¶Step 2:寫程式
作法就是拿 1.1 的 Hello World 程式,把要輸出的文字換成題目要求的內容。以 AACPOJ 0hello 為例,它要你輸出 Hello, AACPSCHOOL!:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, AACPSCHOOL!" << endl;
return 0;
}
(NCOJ 501 也一樣,只要把 cout 裡的文字換成它要求的就好。)
¶Step 3:先用線上編輯器測試
按 Run 執行,看看有沒有印出題目要的內容。這題不用輸入,跑下去應該直接出現:
Hello, AACPSCHOOL!
確認輸出和題目要求一字不差,再提交到 OJ。
¶Step 4:提交到 OJ
在 AACPOJ 上,題目敘述和程式碼框就在同一個頁面,所以很直接:
- 打開題目(例如 0hello)的頁面
- 在頁面上的程式碼框,把你的程式打進去(或從編輯器貼過來)
- 語言選 C++17
- 按 提交(Submit)
(NCOJ、TIOJ 等其他評測系統的做法稍有不同:通常要另外開一個「提交」頁面,把程式碼貼上去、或上傳你的 .cpp 檔,再選語言送出——步驟大同小異。)
¶Step 5:看評測結果
等待幾秒鐘,OJ 會告訴你結果:
- ✓ AC:恭喜!程式正確
- ✗ WA:輸出格式或內容有誤,檢查你的程式
- ✗ CE:編譯失敗,檢查語法
¶常見提交問題及解決
¶問題 1:WA(答案錯誤)
原因可能:
- 輸入格式理解錯誤(如期望多行,你卻用空格分隔)
- 解題的邏輯有誤
- 輸出格式不對(如少了換行、多了空格)
解決:
- 重新讀題,確認輸入/輸出格式
- 在線上編輯器用題目附的範例測資來測試
- 檢查有沒有邊界情況(如 n=1、結果是 0 等)
¶問題 2:CE(編譯錯誤)
原因: 程式碼有語法錯誤
解決:
- 看線上編輯器顯示的編譯錯誤訊息
- 根據錯誤訊息修復
- 編譯成功(沒有紅字錯誤)後再提交
動手試試看:回到 1.1 的〈相關練習〉,把那 3 道題目都實際提交一次——每題把程式裡輸出的文字換成該題要求的內容,完整走一遍「寫 → 測試 → 提交 → 看結果」,體驗親手拿到 AC 的感覺。