# Online Judge ###### tags: `Competitive Programming Note` 以下介紹幾個常見的 Online Judge。 先介紹一下 [vjudge](https://vjudge.net/),嚴格來講它不算一種 Online Judge,它整合了很多個 OJ,首頁就有列表,題目都是從那些網站來的,提交的時候是透過 vjudge 提交到題目來源的 OJ 評測(所以如果有 OJ 掛了,vjudge 上從那邊來的題目也都會不能 judge),如果懶得註冊一大堆帳號的話可以用用看。 ## [Zero Judge](https://zerojudge.tw) 應該是臺灣最多人使用的 Online Judge,可以自己出題,所以題目很多又很雜,題目品質有好有壞。 ## [Green Judge](http://tcgs.tc.edu.tw:1218/) 臺中女中架的 OJ,很容易爆炸 (?),很多老師上課喜歡用它。 ## [TIOJ](https://tioj.ck.tp.edu.tw/) 建國中學的 OJ,有很多優質題目,題目量也多。 ## [HSNU OJ](http://140.136.150.68/judge/) 師大附中的 OJ,由於近年沒什麼人在動它,聽說還壞掉很久了,所以題目都是好幾年前的,但很多優質題。 ## [UVa Online Judge(Online Judge)](https://onlinejudge.org/) 本來是西班牙瓦拉多利大學(University of Valladolid)開的,後來瓦拉多利大學似乎退出經營這個 OJ,所以名稱中的 UVa 就被拿掉,只剩下 Online Judge 了,但大家還是都會叫它 UVa,畢竟只講 Online Judge 根本沒人知道你在說什麼。 「去打 OJ 啦。」 「你說哪個 OJ?」 「就那個 OJ 啊。」 世界上歷史最悠久的 OJ,也是最多人使用的,題目量極大,除了輸入輸出常常很麻煩之外,題目品質還不錯。 ## [Codeforces](https://codeforces.com/) 世界上最多人參加的線上競賽網站,每過個幾天就會辦一場線上比賽,也有考古題可作,也可以用過去的比賽進行模擬賽(Virtual participation),題目量大且優質,幾乎每場比賽都會有詳解,很適合用來學習。 因為 Codeforces 的比賽制度比較複雜,所以特別介紹一下。 它有一個很特別的功能,叫作 hack,可以 hack 的時機因賽制而有所不同,hack 是指製造一筆測資,使得某個已經 AC 的程式碼得出錯誤答案,接下來這筆提交就會被視為錯誤。 賽制分成兩種: - Codeforces Round: 這種賽制的比賽名稱通常是 Codeforces Round …… Div.1/2,是比較特殊的賽制,每一題所佔的分數不同,每過一分鐘,可以得到的分數就會少一些,也就是說越晚通過,得到的分數就會越少。 每一次失敗的提交會讓該題分數扣 50 分,扣到 200 為止。hack 是在賽中進行,一題通過之後,題目列表會出現一個鎖頭,鎖上後就不能再提交該題,並且可以看其他人該題的程式碼。會分房間,只能 hack 同一房的人,hack 失敗的話會扣 50 分,成功加 50 分。 然後因為被 hack 的人會看到自己被 hack,他可以在這之後找到自己的錯誤再提交一次,如果你不喜歡這樣的話,可以等到快結束的時候再來 hack (?)。注意 hack 的分數可以扣到變負的。 賽中的評測稱為 pretest,只包含一部分預先出好的測資,賽後會有 system test,包含所有預先出好的測資和成功 hack 的測資。所以 Codeforces 都不能假解,system test 一定會爛,有時候也會出現 pretest 很弱,導致一堆人 system test 爛掉的狀況。 如果同一題重複 AC,會取最後一次 AC 的分數,這點要特別注意。 - Extended ACM-ICPC: 仿 ICPC 制,每題佔分相同,先比 AC 數,再比罰時,這種賽制的比賽通常是 Educational Codeforces Round 或 Codeforces Round Div.3,一次失敗提交罰時 10 分鐘。 hack 是在賽後的,稱為 open hack,可以 hack 所有人,但成功沒有獎勵,失敗也沒有懲罰,只有被 hack 的人會有損失而已。open hack 通常持續 12 小時,結束後會有 system test,包含所有成功 hack 的測資。然後當然也會有 pretest 很弱的可能性。 如果同一題重複 AC,會取第一次的,所以如果你不確定你的解能不能過 system test,可以寫另一種寫法再交一次。 最常見的比賽就是 Codeforces Round Div.1/2/3 或 Educational Codeforces Round,Codeforces Round 的比賽名稱後面有時候會有 based on XXX,XXX 是某場比賽,表示題目有一部分是從 XXX 來的,也有些比賽會以 Codeforces 作為平台,有些大家都可以參加、有些不行。 Codeforces 有績分制度,稱作 rating,初始是 1500,每場比賽結束後依據表現,rating 會上升或下降。會影響 rating 的比賽我們說它 rated,否則就是 unrated。 除了有績分,也有牌位,不同的績分範圍會有不同牌位,也就是排行榜上 ID 五顏六色的原因,通常大家會用顏色來稱呼: | 名稱 | rating | 顏色 | |---|---|---| | Legendary Grandmaster | 3000~ | 紅黑 | | International Grandmaster | 2600~2999 | 紅 | | Grandmaster | 2400~2599 | 紅 | | International Master | 2300~2399 | 黃/橘 | | Master | 2100~2299 | 黃/橘 | | Candidate Master | 1900~2099 | 紫 | | Expert | 1600~1899 | 藍 | | Specialist | 1400~1599 | 青 | | Pupil | 1200~1399 | 綠 | | Newbie | ~1199 | 灰 | 上述的黃和橘是一樣的顏色,只是因為大家對顏色的認知不同,所以有時候會有不同稱呼。 比賽的難度分成三個類別,Div.1/2/3,分別對不同的牌位 rated,Div.3 是青牌以下,Div.2 是紫牌以下,Div.1 則是全部人,但當有一場比賽同時分成 Div.1 和 Div.2 舉辦時,只有 Div.1 對紫牌 rated。Codeforces Round 會在比賽名稱上標註它屬於什麼類別,Educational Codeforces Round 則是固定 Div.2。 除了這些基本規則之外還有很多很酷的功能,可以自己研究看看。 然後因為這是俄羅斯網站,比賽時間通常在莫斯科時間的下午,大約是台灣時間的晚上十點左右,有時候會早一點、有時候晚一點。 ## [AtCoder](https://atcoder.jp/) 日本的線上競賽網站,同樣也有績分和牌位制,每一兩週左右會有一場比賽,每場比賽的 rated 範圍都有標註在比賽列表,時間通常是台灣時間晚上八點。 賽制簡單很多,沒有 hack、沒有 system test,先比 AC 數,再比罰時,比較特別的是,時間是看最後一個 AC 的時間(而不是所有題目 AC 時間累加),再加上每次提交失敗罰時 5 分鐘。還有罰時的單位是秒,所以差個幾秒也會有差。