【FFSプロコン】解答の判定とステータスコード
コンテストに参加し、問題の解答を提出すると、解答は自動的に「判定」されます。
「判定器」が、解答のプログラムを実行し、テストに合格すると、得点が付与されます。各問題には、複数のテストケースが設定されており、テストケースごとに部分点が付与されます。
解答の判定フロー
1.「判定器」は、解答のプログラムを実行できるよう、解答のコードをコンパイル&リンクします(言語依存)。
- もし、コンパイルエラーが発生したら、内容に応じて、解答を修正し、再提出してください。
2.「判定器」は、各問題に設定された、複数のテストケースについて、順次、プログラムを実行します。
- 各テストケースに合格(
AC)すると、「採点」の対象となり、得点が与えられます(部分点)。すべてのテストケースに合格するか、途中で失敗(AC以外)するまで、繰り返します。失敗すると、実行終了します。 - 途中のテストケースで失敗(
AC以外)した場合は、合格(AC)したテストケースまでの、部分点の合計が、その問題の得点として付与されます。
もし、 「判定」でテストケースの実行に失敗した場合 は、 ステータスコード (下記)に応じて、解答を修正し、再提出してください。
ステータスコード(status code)
提出された、解答のプログラムを「判定」するさいに発生しうる、すべての ステータスコードと、その説明を示します。 判定のステータスコードについて、優先度の低い順に、列挙します。
(なお、判定が AC 以外の場合には、ひとつのテストケースに、複数のステータスコードが、与えられる可能性が、しばしば、あります。その場合は、最も優先度の高い、ステータスコードが表示されます。)
1. AC - Accepted
プログラムはテストに合格しました。場合によっては、「採点者」からの追加フィードバックが付随することもあります。
2. WA - Wrong Answer
プログラムは実行中にクラッシュしませんでしたが、生成された出力が間違っていました。何が間違っていたかを示す追加のフィードバックが付随する場合があります。
3. IR - Invalid Return
プログラムはゼロ以外の終了コードで戻りました( C++ などのネイティブ言語を使用していない場合は、クラッシュしています)。 Python や Java などの言語の場合は、通常、プログラムがスローした例外の名前(それぞれ 、 NameError または java.lang.NullPointerException )が付随します。
4. RTE - Runtime Error
プログラムによってランタイムエラーが発生しました。これは、C や C++ などのネイティブ言語でのみ発生します。「判定器」は、多くの一般的な RTE を、以下で説明する、より便利な説明に、マッピングします。
| フィードバック | 説明 |
|---|---|
segmentation fault、bus error |
SIGSEGV または SIGBUS によって、プログラムが強制終了されました。通常、これはメモリ不足を意味しますが、場合によっては、範囲外の配列にアクセスしていることも意味します。 |
floating point exception |
プログラムがゼロ除算などの不正な算術演算を実行しました。 |
killed |
何らかの理由で (理由は不明)、ランタイムによって、プログラムが強制終了されました。 |
{} syscall disallowed |
プログラムが許可されていないシステム コールを使用しようとしたときに発生します。疑わしい行為をしていない限り、このメッセージが表示されることはありません。 |
std::bad_alloc |
new が十分なメモリを割り当てることができませんでした。 |
failed initializing |
プログラムがグローバルスコープで定義されたデータを多用しているため、起動時のメモリ制約内に収まりきりません。典型的な例としては、 64 MB のメモリ制限がある問題について、 int arr[10000][10000] のようなコードがあります。この場合、前述の配列は、 381 MB を占有し、許容される制限をはるかに超えます。 |
5. OLE - Output Limit Exceeded
プログラムが stdout に出力したデータが多すぎます。通常は、 256 MB 超です (ただし、問題によっては、個別の制約 - 通常は、より大きな制約 - がある場合があります)。
6. MLE - Memory Limit Exceeded
プログラムのメモリが不足しています。問題の「メモリ制限」を超えました。
場合によっては、RTE として現れ、segmentation fault や std::bad_alloc が不随する ことがあります。
7. TLE - Time Limit Exceeded
プログラムの実行に時間がかかりすぎました。問題の「制限時間」を超えました。
8. IE - Internal Error
「判定器」がエラーに遭遇した、もしくは、問題作成者の設定が正しくない ことを意味します。
コメント