AtCoderのジャッジステータスの表示優先度


AtCoder のジャッジステータスはこちらにまとめられています[^1]。
https://atcoder.jp/contests/abc313/glossary
ただ、複数の条件を満たした場合などの表示の優先度は書いていなかったので、調べてみました。

- 特に注釈があるものを除き、2023 年 8 月開催の [ABC313](https://atcoder.jp/contests/abc313) (新ジャッジ導入前) で検証しました。
- IE はジャッジ側のエラーで出る特殊なステータスのため、また、CE (と多分 IE も) はプログラム実行前に出るステータスであるため、これらは検証していません。
- QLE は含めていません (後述)。
- 検証のソースはページ末尾に示します。
- この優先度は、今後告知なしで変わる可能性や、コンテストによって変わる可能性があります。


## 提出の表示優先度

例: ある提出で、10 テストケース中 6 ケース TLE・4 ケース MLE の場合、提出ページの結果欄はどうなるか？

以下の優先度で表示されます。(テストケースに含まれるステータスのうち、最も左のものが表示されます)

**RE > OLE > WA > TLE > MLE > AC**

- テストケースの数は関係ないです。
  - 1 ケースだけ WA、他全部 TLE でも WA が出ます。
- 部分点のある問題であっても、全テストケースの結果をもとに判定されます。[^2]
  - 100 点問題で 30 点分・70 点分に分かれており、前者は全ケース AC し後者に AC・RE・WA がある場合、結果欄に RE、得点欄に 30 と表示され、30 点が得られます。
- この優先度は、ジャッジ途中でも適用されます。
  - 例えば、10 ケース中の第 1, 2 ケースで WA となり第 3 ケースのジャッジに入った場合、その時点では「3/10 WA」と表示されますが、第 3 ケースが RE だった場合「4/10 RE」に変わります。

## テストケースの表示優先度

例: あるテストケースで実行時間制限・メモリ制限の両方を超過した場合、そのケースは TLE・MLE のどちらになるか？

以下の優先度で表示されます。

1. 終了するか時間打切り[^3]を受ける前に、RE, OLE が発生したか？ → RE, OLE
1. 実行時間制限を超えて終了した、または時間打切りを受けたか？ → TLE
1. メモリ制限を超えたか？ → MLE
1. 出力が間違っているか？ → WA
1. AC

不等式で書くと以下のようになります。

**RE, OLE > TLE > MLE > WA > AC**

提出のものと比べ、WA が 2 つ右に移動しています。

## その他補足

- 実用上は、提出の表示の **RE > WA > TLE** あたりを覚えておけばよいと個人的には思います。
  - 例えば「『17/20 TLE』と出ているということは、少なくとも 16 ケースには RE も WA もないので、高速化を優先的に考えよう」と判断できます。
  - もちろん、全く覚えていなくてもジャッジ完了後に提出のページを開けば内訳はわかります。
- OLE は、ABC313 では C++ で数億文字の出力を行った場合などに出ますが、新ジャッジ導入で出にくくなったようです。
  - OLE コードを新ジャッジで試したら、WA になりました。
- 一覧にないジャッジステータスとして **QLE** (Query Limit Exceeded, クエリ回数制限超過) があります ([問題例](https://atcoder.jp/contests/kupc2020/tasks/kupc2020_j?lang=ja))。ただ、約 3 年以上前の問題での使用例しか見つからなかったこと、AtCoder 主催コンテストでの使用例が見つからなかったこと、コンテストまたは時期によって優先度が異なっていそうなこと[^4]から、ここには含めていません。
  - 多くのインタラクティブ問題では、制限回数以上のクエリを送った場合、ジャッジ結果は WA や不定とされており、不定の場合も QLE 以外になることが多いようです ([問題例](https://atcoder.jp/contests/abc313/tasks/abc313_d))。



## 検証ソース

### 提出
- RE > OLE: https://atcoder.jp/contests/abc313/submissions/44558582
- OLE > WA: https://atcoder.jp/contests/abc313/submissions/44558430
- WA > TLE: https://atcoder.jp/contests/abc313/submissions/44542733
- TLE > MLE: https://atcoder.jp/contests/abc313/submissions/44596322
- 部分点問題でも、表示優先度は全体で見る: https://atcoder.jp/contests/joigsp2023/submissions/44596464

### テストケース

- OLE の後に TLE したら OLE (そこで打切られる): https://atcoder.jp/contests/abc313/submissions/44596547
- OLE の後に RE したら OLE (そこで打切られる): https://atcoder.jp/contests/abc313/submissions/44596562
- RE の後に OLE したら RE (そこで打切られる): https://atcoder.jp/contests/abc313/submissions/44596912
- MLE の後に TLE したら TLE
  - (打切りあり): https://atcoder.jp/contests/abc313/submissions/44596695
  - (打切りなし): https://atcoder.jp/contests/abc313/submissions/44596716
- 何かを出力した後に TLE した場合、その出力に AC の可能性が残っているかにかかわらず、また TLE が打切りかにかかわらず、TLE する
  - (AC 可能性残り、TLE 打切りあり): https://atcoder.jp/contests/abc313/submissions/44597202
  - (AC 可能性なし、TLE 打切りあり): https://atcoder.jp/contests/abc313/submissions/44597206
  - (AC 可能性残り、TLE 打切りなし): https://atcoder.jp/contests/abc313/submissions/44597243
  - (AC 可能性なし、TLE 打切りなし): https://atcoder.jp/contests/abc313/submissions/44597246
- WA が確定した後に MLE した場合 MLE: https://atcoder.jp/contests/abc313/submissions/44597321


[^1]: コンテストごとにページがあり、基本的に内容は同じようです。リンクは ABC313 のものです。
[^2]:これは『[JOIG 2022/2023 春季トレーニング 過去問](https://atcoder.jp/contests/joigsp2023)』で検証しました。
[^3]: 実行時間制限の 1.1 倍を経過してもプログラムが終了しない場合、強制的に打切られます。
[^4]: 2018 年の『[Kyoto University Programming Contest 2018](https://atcoder.jp/contests/kupc2018)』では提出の表示優先度が [QLE > RE](https://atcoder.jp/contests/kupc2018/submissions/3308431) ですが、2020 年の『[京都大学プログラミングコンテスト 2020](https://atcoder.jp/contests/kupc2020)』では [WA > QLE](https://atcoder.jp/contests/kupc2020/submissions/44545190), [QLE > TLE](https://atcoder.jp/contests/kupc2020/submissions/44545326) に変わっています。