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

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

系統特色:
  • 詳細的錯誤資訊:包含錯誤答案發生在第幾行,及正確答案應為什麼。完整的 Runtime Error 資訊,共包含了 SIGSEGV, SIGFPE, SIGTERM, SIGABRT, SIGKILL...等多種 Runtime Error 訊息,並且提示可能的原因。
  • 由使用者來決定題目的困難度,依投票的困難度取其眾數。
  • 使用者參與管理工作,使用者亦可利用系統出題目以及舉辦考試。
  • 可直接分享程式碼,以及站內簡訊進行討論。
  • 測驗結束後,可對程式碼進行分析,找出作弊者。
  • 可預約測驗,時間一到即可自動開始,不需管理者啟動。
* 主要對象
  主要對象為程式語言初學者
* 錯誤訊息的意義
 

AC: 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 表示編譯錯誤,本系統採用 g++ (GCC) 4.3.4 (Ubuntu) 作為預設編譯器
SE: System Error 包含 Compile, Runtime 等無法確定原因的錯誤均屬於 System Error

由於本系統以初學者為導向,因此錯誤訊息儘可能提供最詳細的錯誤資訊,如 WA 訊息會告知您正確答案,以及在第幾組資料時發生,讓使用者比較容易判斷錯誤發生在哪哩,而不會像在ACM/UVa 裡明明做對了,但是就是有格式錯誤,卻找不出格式錯誤在哪的困境。

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

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

C/C++:使用 g++ (GCC) 3.3.5 (Debian 1:3.3.5-13)
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)

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

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

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

目前系統主機為 IBM Netfinity 3500,CPU Pentium III 667MHz,記憶體 512MB, 作業系統為 B2D ( Debian )。相關系統軟體為 MySQL 5, Tomcat 6.0

* 系統的測試資料的來源
  目前題目總共分成三大類:
第一類為「基本題庫」測試資料比較少量,也不會刻意刁難。
第二類為「競賽題庫」裡面收集了 NPSC (網際網路程式設計全國大賽)的題目,則是使用 NPSC 官方提供的測資,測資通常比較大,也比較全面,因此要更小心解題。
第三類為「ACM 題庫」收集了一些 UVa/ACM 比較簡單的題目,部分測資採用"星子ACM小窩"的測資,部分收集自官方討論區。
* 分數的計算原則
  CE: -16 分, RE: -8 分, MLE: -4 分, TLE: -2 分, OLE: -1 分, WA: 0 分--累進制
AC 者 100 分--不累計。
* 分段計分原則
 

任一題目均可以依照出題者意願設定成分段或不分段計分。出題者最多可分為 10 段計分,分段計分採用累進制,也就是說,任一段測資點必須通過才能進入下一段測資點。每一段測資點由出題者決定配分多寡,通過前 n 段測資即可獲得前 n 段配分和。

分段計分多用在考試或比賽中作為更精確的計分使用。平常的練習系統則必須通過所有的測資點才會獲得 AC 。

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

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

* 小圖示所代表的意義
 

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

* 解題過程中的疑難雜症
 

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

* 畫面醜陋的原因
  由於 IE 6.x 對於 PNG 圖片的支援不佳,會使 PNG 透明圖失效,因而產生灰色的底圖,非常醜陋。雖然已經利用了一段特定 JavaScript 來專門處理 IE 的這個問題,但某些非典型 IE (IE 的行為不正常)仍會出現灰色底圖。解決方式為放棄 IE 瀏覽,本站較適合的瀏覽環境為 FireFox。
* 後記:關於 ZeroJudge
 

ZeroJudge 是一個 Online Judge 系統亦即線上解題系統,中文來說有許許多多不同的翻譯名詞,諸如:在線裁決系統、在線評判系統、在線提交系統...等等不一而足,建議還是直接稱呼 Online Judge 系統。主要是用來讓有意練習程式語言的人士(主要是學生),有一些題目可以練習,並且可以知道自己所寫的程式是不是正確。

目前世界上最著名的 Online Judge 便是大名鼎鼎的 UVa Online Judge System,沒聽過?那是因為大家都叫他 ACM。至於其中原因請參考 DJWS 所寫的『Online Judge System 起源與由來』。目前由西班牙 Valladolid (巴亞多利)大學(http://online-judge.uva.es/problemset/)所維護,目前已經有2000個題目,讓全世界的程式愛好者們想辦法去解決,這是全世界對寫程式有興趣的人一個練習的好地方。

然而,UVa(ACM)題目大多數都是需要用到許多演算法及程式技巧,對於中上程度的程式學習者具有很好的練習效果,但對於初學者,可就會覺得障礙連連,深受打擊了。

本校練習程式設計的學生也有遭遇類似的情況,因此曾積極尋找備有初級題目的Online Judge 系統(首先排除國外網站,因為語言障礙足以擊退絕大多數初學者),可惜無法如願,並且發現國內各大學並未提供公開上線,可供練習的 Online Judge 系統。也曾嘗試考慮北京大學開發的(Peking JudgeOnline),但該系統並未開放原始碼許多功能無法動手修改。最後終於決定自行開發,於是 ZeroJudge 計畫誕生,代表從零開始。

94學年度首度運用在程式考試上,該版本為手動驗證,由人工判斷程式是否正確,此時僅為一個線上測驗系統。
2006年,改寫整個操作模式,使其朝向 Online Judge 架構發展,仍應用於程式考試上。
同年,完成自動裁判服務 (Judge Server),可判斷出 Accept, Wrong Answer, Time Limit Exceed, Memory Limit Exceed, Runtime Error, Restricted Functions, Compile Error, System Error...等狀態,至此可算是一個堪用的 Online Judge 系統。
2007年初,公開上線供公眾練習使用,同時借此檢驗系統穩定度,並逐步發掘問題,逐步修正。
2007年,發展完成多重判決及條件式判決(Special Judge),因此可以正確判定可列舉的多重解答以及難以列舉或甚至無法列舉,但有規則可循的不特定測資。
2007年底,獲教育部全國校園軟體創意競賽 教學應用及自由創意組 第二名。
2008年初,實作完成多人管理模式,使用者可增加題目及舉辦考試,正式具備使用者參與的特性,是 Online Judge 系統的首次嘗試。