在資訊競賽中,不同的比賽往往會有不同的比賽模式,以下將介紹一些常見的類別。
OI 制與 ICPC 制為兩種資訊競賽最常見的計分模式。因主要用於 OI 類型(IOI、TOI 等)比賽與 ICPC 比賽而得名。
在 OI 制的比賽中,題目可能會有子任務。以下節錄自一個有子任務的 OI 題目,這裡順便提供原題連結:
我們知道資訊競賽的題目會有輸入資料的範圍限制,而以此為基準,OI 制題目規劃出來的子任務則會有一些額外的輸入限制,若能夠解決該限制下、通常是弱化版的原問題,那就可以獲得一部份的分數。例如在上面那題裡,如果你能夠解決 $n \leq 2$ 的原問題,那你就可以在該題獲得 $20$ 分;若能更進一步解決規模略大一些的 $n \leq 100$,則能多獲得 $30$ 分。
最後每個人會將每一題的分數加總,並用這個來排名。以下為一些 OI 制比賽的計分板:
上圖左方為 2021 年的臺灣資訊奧林匹亞初選計分板,右方為 2021 年的全國資訊學科能力競賽計分板。
從這些計分板可以發現在 OI 制比賽中,獲得滿分的題數並不一定是重點,如果嘗試的題目夠多,並在一些題目都獲得還不錯的成績,那還是有可能比滿分較多的參賽者高分。
ICPC 制的題目每一題只有「完全通過」與「不通過」兩種。然而如果只按照解題數量作為排名依據,很容易會有同名次的情況,因此 ICPC 制的比賽還會另外計算出每一隊的罰時,在題數相同的時候按照罰時小到大排序。
罰時是全部有通過題目所花費的時間加總,每上傳一次錯誤的程式會使該題的花費時間額外增加20分鐘。然而需注意如果最後該題沒有通過,則該題的錯誤並不會影響罰時。
舉例來說,如果有一隊在第 24 分鐘通過了第一題,而在第 49 分鐘通過了第二題,但在通過之前有上傳一次錯誤的程式,之後在第三題上傳了兩次錯誤的程式,但最後沒有通過。這樣的話該隊的罰時就會是 $24 + 49 + 1 \times 20 = 93$。
因為這樣,跟 OI 制相比 ICPC 制很注重解題的速度,罰時的多寡往往會深深影響到比賽的勝負。以下為一個 ICPC 制比賽計分板的例子:
上圖為網際網路程式設計全國大賽 2022 高中組初賽的計分板,因為排名會優先比較題數,可以發現解出四題但罰時 720 的隊伍排名比三題罰時 128 的隊伍還要前面。
在 ICPC 制的比賽中,還常有一個名叫「封板」的文化傳統。具體來說,大約在比賽的最後一小時內,計分板會被停止更新,俗稱「凍結」。在凍結的狀況下,隊伍之間將互相看不見彼此的「解題結果」,但卻看得見彼此的「上傳狀況」。什麼意思呢?也就是說,$A$ 隊伍可能看得見 $B$ 隊伍在最後一小時上傳了某兩題,卻不知道他們是否已經答對了!
這樣的封閉狀況下,隊伍可能會需要多加揣測其他隊伍的狀況來在賽末一小時做出最終的調整,可說是相當的緊張刺激。而在比賽結束後,若比賽有規劃時間,則通常會再進行「開板」的活動,也就是一個個把隊伍在封板期間未知上傳結果「打開」,而且是由最低的名次一路慢慢往上開到第一名,所以還有可能在這個過程中看見前面的名次不斷逆轉,這在競爭激烈的比賽中尤其容易發生,是非常有可看性的一段活動。
這些開板的活動常隨著頒獎典禮一起進行,有興趣的讀者可以參考看看 2023 網際網路程式設計全國大賽決賽頒獎典禮的影片節錄。
OI 與 ICPC 在比賽上有相當大的差距,因此即使是程式競賽,也常常出現只在其中一種賽制特別擅長的選手。以下將介紹幾個這兩個賽制的差異。
雖然前面給的計分板圖片們看起來十分有趣,但在絕大多數的 OI 制比賽中,選手在賽中是無法看到計分板的,意即當下並不知道其他選手的解題狀況。這樣的賽制讓選手評估題目難度的能力變得更加重要,如果不去試著接觸每一題的話,很有可能就會漏掉簡單題的存在而失大分;相對地,也有可能錯估一題的難度導致花過多時間在試著爭取無謂的分數,滿盤皆輸。
而 ICPC 制就不一樣了,由於 ICPC 重視速度,因此計分板是有必要存在的,靠著計分板,隊伍可以即時發現其他隊伍已經解出哪些題目,進而直接找到簡單題的位置,同時也能根據這些資訊來判斷哪些題目相對比較困難。
在 ICPC 制中,解出題目的同時也會獲得「解出時間」和「錯誤次數」的時間懲罰,但 OI 制則沒有這個問題。也因此,ICPC 制的比賽才會重視速度;而 OI 制的比賽就相對重視分數的有無了。
而在題目數量的部分,越高水準的 OI 制比賽往往都只會有三題左右,相對於 ICPC 制的 10~15 題,題目數量可以說是非常有差距。
題目的數量和時間懲罰的差距,讓 OI 制和 ICPC 制比賽的比賽方式變得完全不同。在 OI 制中,由於題目少、進而導致單一題目的規模會變得龐大,也因此比起快,不如求穩、求精,才可以在比賽期間撰寫一定量的程式碼後解出困難的題目;而 ICPC 制就更重視要先從簡單的題目寫起,並透過時常練習來確保穩定度和速度,在解題方面則更是在乎其精確程度,較少能像 OI 制一樣擁有時間好好摸索題目性質。
說到傳統 OI 制和 ICPC 制的最大差別,就是隊友的有無了。在 OI 制中,往往都是個人賽,同時又因為沒有計分板,在解題的過程中可能會有一些封閉。但 ICPC 制幾乎都是三人一組的!有了隊友的幫助,在 ICPC 中分工就開始變得重要,隊友之間也能彌補互相的弱點來組成一支無比強大的隊伍。更重要的是,在比賽期間隊友也能互相扶持,進而大大減少比賽失常的可能性。
在解題方面,OI 制與 ICPC 制最大的差別就是先前有提過的「子任務」了。子任務設計常有一個重點:那就是引導選手走向官方預期的解答。透過子任務的解出有無,選手常可以自行判斷自己是否走在正確的道路上,官方也能透過子任務的解題狀況來鑑定出選手是否「在該題有進展」。畢竟解題的過程往往都不是一瞬間的,而是透過觀察性質、優化程式所需時間,一步一步推進才能得到最終的「演算法」。有了這些理念,良好的子任務設計便能夠反映出選手在這題的解題進度,進而給出相應的部份分數。
當然,這就是 ICPC 制沒有的部分了,也因此 ICPC 制在解題上更為殘酷一些。
顧名思義,即時評測在上傳一份程式碼後,會馬上告知上傳者該次上傳獲得的分數。賽後評測在比賽結束後才會執行上傳的程式、公佈成績。
多數的台灣比賽都是即時評測,包括學科能力競賽(資訊科)、臺灣資訊奧林匹亞相關競賽(TOI)、網際網路程式設計全國大賽(NPSC)、……。一個採用賽後評測的例子為大學程式設計先修檢測(APCS),在考試中應考者不會得知程式的結果,考試結束後系統以參賽者最後一筆上傳的程式評分,所以許多應考者會在比賽中多檢查、執行寫完的程式,來確保程式沒有問題。
資訊比賽通常會有可以上傳程式、查看評測結果的界面,以下為目前 OI 制比賽最常見的系統 - CMS(Contest Management System)的截圖:
在即時評測的比賽,參賽者能在賽中就知道自己的目前分數,這種即時回饋感是資訊競賽吸引人的地方之一。