[Solution]

當你照著題敘寫完程式之後,你應該會發現你得到了一個十分五彩繽紛的 submission 頁面 (?) 而且神奇的是每筆測資最右邊都有一個小箭頭,點開還有一段訊息,而訊息就很明顯是在告訴你要做什麼事情。

對於 $1\leq N\leq 7$,訊息很明顯是要你獲得一個特定的 verdict,而各 verdict 的說明也可以從 verdict 旁邊的問號點進去看到。大部分都很直白照著 verdict 定義寫就好了,比較特別的幾個作法簡略如下:

  • TLEwhile(1) 就解決了,嗎?如果你單純 while(1) 會收到輸出錯誤的訊息,代表你就算 TLE 還是要有正確的輸出!所以就輸出答案之後再 while(1) 就可以了。
    甚麼?你說你輸出答案了還是沒有拿到分數?你有記得用 fflushstd::endl / std::flush 嗎?因為在 buffered I/O 裡面的東西沒有先 flush 出來的話,在程式異常結束的情況下就不會被輸出出來!後面所有的 verdict 題也都要求輸出正確答案,所以記得都要 flush。
    (另外一個方法是利用 judge 會讓程式多跑一小段時間的特性搶在 TLE 之後快被 kill 掉前先結束,不過這招對 SIG 就沒用了)
  • MLE:這裡有兩個 subtask,看 ML 會發現其中一個是限制 VSS、另外一個是限制 RSS,所以就去看一下 TIOJ 上 RSS 和 VSS 的說明(題目 ML 或 submission 結果的表格旁邊都有個問號,點進去就是了),裡面就有告訴你要怎麼分別寫出 VSS、RSS 很大的程式了。
    VSS 那個 subtask 比較難搞一些,因為額外要求 RSS 不能太大(具體來說是不超過 5000 KiB)。比較好的做法是 malloc / new 出一個很大的 array,但是如果直接 new 出來不做任何事的話會被 compiler 優化掉,所以還要想辦法避免掉優化。可能的作法有把指標放到全域變數裡、或者在 array 裡面寫一點東西。
  • OLE:表面上很簡單,但這個 subtask 還是要求你輸出正確答案。作法就是最後輸出一大堆空格或換行,這些會被 special judge(以及正常的 judge,雖然這題不是)忽略掉。

後面兩個 subtask 則比較特別一點。$N=8$ 很明顯就是要你 VSS、傳的時間和 submission ID 符合某個條件,就開個大小差不多的陣列、估計一下當前的 submission ID 大概會在哪裡(contest 的 submission 會看不到,所以可能要從非 contest 或自己之前的 submission 稍微估一下),然後就抓準時間傳出去!

$N=9$ 很容易 AC,不過 score 的部分就需要自己觀察一下。應該不難發現 score 其實就是 time / 10,所以盡可能接近時限但不要 TLE 就好了。

新功能

這題應該就能看出不少新功能了:
(1) (題敘裡面就提到的)submission 結果會自動更新了!
(2) Special Judge 可以做各種有趣的事情,包括用 submission ID 等各種資料判斷、連續給分、把 verdict、時間、記憶體等結果換掉,以及丟各種訊息給你。

另外在出題上,special judge 之前只能用 C++ 寫,現在則可以用 TIOJ 支援的各種語言寫了(這題的 special judge 是用 Python 寫的)。