語法書 / AA 競程語法書 上冊 / 第一單元 / 第一次提交線上評測系統(OJ)

1.2 第一次提交線上評測系統(OJ)

在競程課程中,你寫的程式最終要提交到「線上評測系統(Online Judge, OJ)」來檢驗正確性。AA 競程的學生平常就是在 AACPOJ(本課程的 OJ)上交作業;其他常見的公開平台還有 NTUCPC Judge、TIOJ、Codeforces 等。

這一節教你怎麼提交,以及讀懂評測結果。

什麼是 OJ?

OJ 是一個自動評測程式的系統:

  1. 你把程式上傳
  2. OJ 自動編譯你的程式
  3. OJ 用預設的輸入測試你的程式
  4. 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 上,題目敘述和程式碼框就在同一個頁面,所以很直接:

  1. 打開題目(例如 0hello)的頁面
  2. 在頁面上的程式碼框,把你的程式打進去(或從編輯器貼過來)
  3. 語言選 C++17
  4. 提交(Submit)

NCOJ、TIOJ 等其他評測系統的做法稍有不同:通常要另外開一個「提交」頁面,把程式碼貼上去、或上傳你的 .cpp 檔,再選語言送出——步驟大同小異。)

Step 5:看評測結果

等待幾秒鐘,OJ 會告訴你結果:

  • AC:恭喜!程式正確
  • WA:輸出格式或內容有誤,檢查你的程式
  • CE:編譯失敗,檢查語法

常見提交問題及解決

問題 1:WA(答案錯誤)

原因可能:

  • 輸入格式理解錯誤(如期望多行,你卻用空格分隔)
  • 解題的邏輯有誤
  • 輸出格式不對(如少了換行、多了空格)

解決:

  1. 重新讀題,確認輸入/輸出格式
  2. 在線上編輯器用題目附的範例測資來測試
  3. 檢查有沒有邊界情況(如 n=1、結果是 0 等)

問題 2:CE(編譯錯誤)

原因: 程式碼有語法錯誤

解決:

  1. 看線上編輯器顯示的編譯錯誤訊息
  2. 根據錯誤訊息修復
  3. 編譯成功(沒有紅字錯誤)後再提交

動手試試看:回到 1.1 的〈相關練習〉,把那 3 道題目都實際提交一次——每題把程式裡輸出的文字換成該題要求的內容,完整走一遍「寫 → 測試 → 提交 → 看結果」,體驗親手拿到 AC 的感覺。