當你照著題敘寫完程式之後,你應該會發現你得到了一個十分五彩繽紛的 submission 頁面 (?) 而且神奇的是每筆測資最右邊都有一個小箭頭,點開還有一段訊息,而訊息就很明顯是在告訴你要做什麼事情。
對於
- TLE:
while(1)
就解決了,嗎?如果你單純while(1)
會收到輸出錯誤的訊息,代表你就算 TLE 還是要有正確的輸出!所以就輸出答案之後再while(1)
就可以了。
甚麼?你說你輸出答案了還是沒有拿到分數?你有記得用fflush
或std::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 則比較特別一點。
新功能
這題應該就能看出不少新功能了:
(1) (題敘裡面就提到的)submission 結果會自動更新了!
(2) Special Judge 可以做各種有趣的事情,包括用 submission ID 等各種資料判斷、連續給分、把 verdict、時間、記憶體等結果換掉,以及丟各種訊息給你。
另外在出題上,special judge 之前只能用 C++ 寫,現在則可以用 TIOJ 支援的各種語言寫了(這題的 special judge 是用 Python 寫的)。