程式解題系統使用手冊
* Online Judge 的運作原理
 

裁判系統會以數量不一的測試資料去測試您所送出的程式碼來判定您的程式是否完全正確,若通過所有的測試資料的測驗,則系統認定您的程式碼為通過,否則將會呈現不同原因的結果,如 NA, WA, TLE, MLE, OLE, CE, RE...等。因此必須在程式中放入一個 while 迴圈來讀取所有的測試資料。程式碼請參考 a001。

系統特色:
  • 可以告訴使用者錯誤答案發生在第幾行,方便除錯。
  • 由使用者來決定題目的困難度,依投票的困難度取其眾數。
  • 可直接分享程式碼,以及站內簡訊進行討論。
  • 可預約競賽,時間一到即可自動開始,並自動結束,可不需管理者操作。
  • 可在系統上進行開課,可成為一個開課平臺。
* 錯誤訊息的意義
 

AC: Accept 即表示通過
NA: Not Accept 表示在多個測資點的情況下,有部分測資點無法通過
WA: Wrong Answer 表示答案錯誤, 請仔細比對,務必符合題目要求
TLE: Time Limit Exceed 表示執行超過時間限制
MLE: Memory Limit Exceed 表示程序超過記憶體限制
OLE: Output Limit Exceed 表示程序輸出超過限制
RE: Runtime Error 表示執行時錯誤,通常為記憶體配置錯誤 如:使用了超過陣列大小的位置
RF: Restricted Function 表示使用了被禁止使用的函式,並在錯誤訊息中指明使用了什麼不合法的函式。
CE: Compile Error 表示編譯錯誤,本系統採用 GCC 作為預設編譯器
SE: System Error 包含 Compile, Runtime 等無法確定原因的錯誤均屬於 System Error

* 各項解題語言所使用的系統編譯器
 

本系統目前支援 C/C++、JAVA 及 PASCAL 解題

C/C++:使用 GCC
C++ 編譯參數為:-lm -lcrypt -O2 -pipe -DONLINE_JUDGE
C 編譯參數為:-lm -lcrypt -O2 -pipe -ansi -DONLINE_JUDGE
JAVA:使用 Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_02-b09)
PASCAL:使用 Free Pascal 2.2.2 for Linux; 參數: ppc386 -Sg -PE

* 使用者寫題目時建議使用的編譯器
  建議使用 Dev-C++ , 請在 google 鍵入 Dev-C++ 即可找到,這個軟體是免費下載。
另外,eclipse 亦可經由安裝 plug-in(CDT 及 MinGW) 開發 C++,惟安裝過程稍嫌繁複。
建議勿使用 Turbo C++ 以及 Microsoft Visual C++ 6.0 ,該系統的編譯器過於老舊且不符標準。
* 題目的困難度投票
 

本系統題目每一道題目都具備有困難度的標識,以利初學者判斷。困難度標示則由所有曾通過該題目的使用者來進行投票,最後求取其平均值。困難度1 代表最簡單的題目,困難度5則代表比較困難。需注意的是,在網站上解題的高手很多,期望投票時能以初學者的角度來投困難度,而非每題都覺得很簡單就全部投 1,如此則容易導致困難度失真。

* 程式執行的速度的計算
  本系統對每個獲得 AC 的程式會一併顯示執行時間(以毫秒為單位),程式執行時間會隨系統當時負載而有的差異,以本系統為例,一個不做工作的程式執行就會花費約 4 ms,因此初學者只需專注於程式的正確性,可以暫不需過於在意執行時間,只要在題目規定的時間內執行完畢即可。
* 主機的等級
 

目前系統主機為 IBM System x3550,CPU Intel Xeon,記憶體 2G, 作業系統為 Red Hat Enterprise Linux Server。相關系統軟體為 MySQL 5, Tomcat 6.0

* 多測資點的計分原則
 

* 任一題目均可以依照出題者意願設定成分段或不分段計分。出題者最多可分為 10 段計分,每一段均可依據困難度配分,總和為100分。
* 每一個點不必然只有一組測資,多測資點的題目仍然可以在每個測資中使用多組測資,因此仍然要以多組測資的方式讀入。
* 當題目為多測資點時,假設共 10 個測資點,對每一個測資點來說,其 Timelimit 為題目 Time limit 的 10 分之一,小於 1 秒以 1 秒為其時間限制。

* penalty 的計算原則及目的
  penalty 是在程式競賽中評斷選手表現的一個指標,主要目的就是要了解選手解題速度及錯誤率。本系統的 penalty 規則為:當題目通過時即加上通過時的時間(以分鐘計),當送出的題目不通過,則 penalty 每一次再加 20 分鐘。在相同的正確題數下,penalty 越低排名越高。
* JAVA 解題範例
 
基本讀取方法如上,類別名稱請指定為 JAVA, ZeroJudge 系統會做必要的處理。
* C 解題範例
 
* C++ 解題範例
 
* 統計數據說明
 

註冊人數:從 2008-09-01 開始統計的總註冊人數
解題人次:從 2008-09-01 開始統計解題總數
題目數:從 2008-09-01 開始統計目前開放可解的題目總數
已廢棄:部分題目因重複、不合適等因素被廢棄總數
登入人數:目前正登入系統的人數
上線人數:目前正進入本網頁的人數,技術上來說即產生了一個 Http Session 的要求,並且仍有效的總數。
登入人次:從 2008-09-01 開始統計的登入人次總數。
訪問次數:從 2008-09-01 開始統計的訪問總次數,技術上來說即產生了一個 Http Session 的要求計算一次。因此,並不像一般網頁計數器,將頁面重新整理訪問次數便增加,在同一個 Http Session 作業階段,均只計數一次,除非關閉瀏覽器重新進入,因為關閉瀏覽器會結束現行的 Http Session,重新開啟瀏覽器再進入就會再產生一個新的 Http Session。此外,訪問次數盡力排除搜尋引擎的訪問數,只要是目前已知的收尋引擎機器人所產生的請求就不列入紀錄,以免無謂的瀏覽記錄累積。

* 小圖示所代表的意義
 

:代表目前程式碼是「上鎖」的狀態,按下此圖形就會解鎖。
:代表目前程式碼是「公開」的狀態,按下此圖形就會上鎖。
:代表將該程式碼進行重測,一般來說,只有在題目或測資有更動時,才需要重測。

* 解題過程中的疑難雜症
 

‧若使用 Microsoft Vistual C++ 6 很容易出現編譯錯誤,因為VC6 並未依循 ISO /ANSI C++ 98 的標準,比如 void main() 這類的寫法都能通過 VC6 但送上Judge 系統則會出現編譯錯誤。