FAQ

Last-modified: 2011-02-15 (火) 12:55:58

原文

よくある質問と答え
POJ 管理スタッフ

解答の書きかた

解答作成のための共通のガイドライン

このジャッジシステムには、多種のアイデアと技術を要求する何千のプログラミングの問題があります。
しかし、その多様性にかかわらず、期待どおりにジャッジを行うために、あなたはどの問題にも共通のガイドラインに従う必要があります。

ガイドライン1: 問題の要求するちょうどのことを行うこと。

多くの入門者が、問題が要求していない「整数を入力してください:」という(一見フレンドリな)プロンプトメッセージを出力するという間違いを犯しています。また、デバッグ用に出力した情報を消さないまま提出することも多くあります。我々のジャッジシステムは自動化されているので、解答を人力で検査することはありません。管理者も開発者も、特別な事情のない限り、あなたのプログラムの出力を読むことはありません。そのため、問題で要求されていないプロンプトメッセージはほぼ無意味でしょう。また、なお悪いことに、不要な出力はジャッジの邪魔をし、論理的に正しい解答を誤答と判定してしまう可能性が高いです。注意してください。

ガイドライン2: 標準入出力とメモリのみにアクセスすること。

あなたの解答は常に標準入力から入力データを読み、標準出力に出力データを書かなければいけません。あなたの解答のために使えるストレージ領域はメモリーだけです。ディスクやファイルシステムなどの他のリソースへのアクセスはジャッジシステムにより禁止されています。このような試みをしたときの結果は未定義です。

ガイドライン3: 標準に準拠したコードを書くこと。

私たちは、標準準拠なコードの使用を強く勧めます。いくつかのコンパイラーは言語標準にないベンダー特有の機能を提供します。しかし私たちは、標準に準拠したプログラミングの練習となるために、これらの機能を無効化するよう努力しているので、このようなベンダー特有の機能を利用した解答はコンパイルエラーになることでしょう。

言語ごとの要求事項と例

このジャッジシステムは現在、C,C++,Pascal,Java,Fortranで書かれた解答を受け付けています。
以下の表に、使用しているコンパイラーとサポートされている言語標準を示します。
各言語で書かれたProblem 1000のサンプル解答を付録に示します。

言語コンパイラ標準注意事項
CMS VC++ 2008 Express (“C”) および MinGW GCC 4.4.0 (“GCC”)C99ONLINE_JUDGEというマクロが定義されます。
GCC4.4.0のC99実装は完全とはいえません。特に、可変長配列サポートは本質的に複雑であり、虚数サポートは「壊れている」と言えます。
C++MS VC++ 2008 Express (“C++”) および MinGW GCC 4.4.0 (“G++”)C++98ONLINE_JUDGEというマクロが定義されます。
新しいC++標準の策定およびそのサポートがまだ為されていないため、今のところは実験的なC++0x機能を有効化する予定はありません。
JavaJDK 6 (“Java”)ONLINE_JUDGEというシステムプロパティーが設定されます。
publicまたはデフォルトのアクセス修飾子をもつMainクラスを書き、そこにエントリポイントとなるmainメソッドを定義してください
PascalFreePascal 2.2.0 (“Pascal”)FreePascal dialectONLINE_JUDGEというマクロが定義されます。
FortranMinGW GCC 4.4.0 (“Fortran”)Fortran 95

ジャッジ過程

解答提出ページで使用できるアクセスキー

アクセスキーページ要素
Alt+L「言語」(Language)ドロップダウンリスト
Alt+P「問題ID」(Problem ID)フィールド
Alt+S「提出」(Submit)ボタン
Alt+U「ユーザーID」(User ID)フィールド(ログイン後有効)

ジャッジ過程の概要

まず、ジャッジシステムは提出された解答をMain.___(___は言語ごとの拡張子)というファイルに保存します。
次に、解答プログラムをコンパイルするために、指定されたコンパイラが起動されます。
もしコンパイルが成功したら、ジャッジシステムは用意されたそれぞれのテストケースについて解答プログラムを実行します。このジャッジシステムは「先行不可」(reject-fast)です。つまり、どの段階でも解答プログラムが不正解である理由が見つかった時点でジャッジを終了し、すぐに結果を返します。

ジャッジシステムの返答

返答略号意味
AcceptedACジャッジシステムまたはチェッカープログラム(よくスペシャルジャッジと呼ばれるもの)は、解答プログラムの出力を正しいとみなした。
Presentation ErrorPE解答プログラムの出力の内容は正しいようだが、フォーマットが正しくない。
Time Limit ExceededTLE解答プログラムは許された時間内に終了しなかった。つまり、テストケース全体の実行時間が全体実行時間制限を突破したか、1テストケースの実行時間がケースごと時間制限を突破したかのどちらかである。Javaで書かれた解答の時間制限は3倍され、各テストケースにつき110msの追加時間が与えられることに注意すること。
Memory Limit ExceededMLE解答プログラムは与えられたより多くのメモリを消費した。
Wrong AnswerWA解答プログラムの出力が期待されたものではなかった。
Runtime ErrorRE解答プログラムは実行中に発生した例外(言語環境によって規定される例外の類)をハンドルしなかった。
Output Limit ExceededOLE解答プログラムの出力があまりに多量であった。
Compile ErrorCE解答プログラムは実行可能な形式へのコンパイルに失敗した。
System Errorジャッジシステムが何らかの想定外の理由で解答プログラムん実行に失敗した。
Validator Errorチェッカープログラムが解答プログラムを検証している途中で何らかの異常な挙動を起こした。

その他の質問

ISO C-互換のprintfフォーマット指定子

2009年5月のコンパイラーアップグレードに先立ち、私たちはGCC 3.4.2を用いたCとC++の提出の受付を始めました。
このバージョンのGCCは、古いMS VC++ 6のランタイムライブラリに依存しますが、このライブラリのprintfはlong longおよびunsigned long longタイプのためのフォーマット指定子である%lldと%lluをサポートしません。いっぽうで、浮動小数点数のために、標準非互換の%lfおよび%lgというフォーマット指定子がサポートされています。
新しいGCC 4.4.0はISO C-互換の時前のprinf実装を持ちます。そのため、今ではどちらのC/C++コンパイラーでも%lldおよび%lluが使用できますが、%lfと%lgはMS VC++ 2008 Expressでしか動作しません。要するに、浮動小数点数をprintfで使いたいときは%fと%gを使いましょうということです。

その他の質問

もしこのページを読んでもわからないことがあれば、遠慮せずweb boardにポストするか、管理者に連絡してください。

付録

Problem 1000へのサンプル解答

C言語

#include
 
int main(void)
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d", a + b);
    return 0;
}

 

C++

#include
 
using namespace std;
 
int main(void)
{
    int a, b;
    cin >> a >> b;
    cout << a + b;
    return 0;
}

Java

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int a = cin.nextInt();
        int b = cin.nextInt();
        System.out.println(a + b);
    }
}

Pascal

Program p1000(Input, Output);
var
    a, b: Integer;
 
begin
    read(a, b);
    write(a + b);
end.

Fortran

      PROGRAM P1000

      IMPLICIT NONE
      INTEGER :: A, B

      READ(*,*) A, B
      WRITE(*, '(I0)') A + B

      END PROGRAM P1000