外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

SHAREOJ GUIDE

入出力生成と入力検証の使い方

テストケースをコードで作れます。ケース番号から入力を生成し、その入力を解答プログラムに渡して期待出力を揃えましょう。

ケース番号から入力を作る

入出力生成の画面。①生成・検証・判定、②入力生成、③出力生成、④入力検証、⑤言語と件数、⑥生成する、⑦テストケースを確認

作問画面の①「生成・検証・判定」で②「入力生成」を選び、⑤で言語、開始ケース番号、生成件数を指定して、⑥「生成する」を押します。 ケース番号を1ずつ増やしながらプログラムを実行し、標準出力を新しいテストケースの入力として追加します。 ケース番号は、標準入力に整数1個と改行で渡します。

たとえば、次のC++23プログラムで開始ケース番号を7、生成件数を3にすると、表の3件を追加します。

#include <iostream>

int main() {
    long long case_number;
    std::cin >> case_number;
    std::cout << case_number << " " << case_number + 1 << "\n";
}
ケース番号 生成される入力
7 7 8 と改行
8 8 9 と改行
9 9 10 と改行

既存のテストケースは残り、追加したケースの期待出力は空になります。 追加した入力は、⑦「テストケースを確認」で確かめられます。 乱数を使う場合は、ケース番号をシードにすると同じ入力を再現できます。

解答プログラムから期待出力を作る

③「出力生成」では、登録済みのすべてのテストケースの入力を解答プログラムに渡し、標準出力で期待出力を上書きします。

#include <iostream>

int main() {
    long long a, b;
    std::cin >> a >> b;
    std::cout << a + b << "\n";
}

デバッグ用の表示も期待出力に混ざるので、標準出力には答えだけを書いてください。 解答コードの誤りはそのまま期待出力になるため、手計算できる小さなケースなどで答えを確かめてください。

入力が制約を満たすか検証する

④「入力検証」では、登録済みのすべてのテストケースの入力をプログラムに渡し、終了コード0なら合格、それ以外なら不合格とします。 入力と期待出力は変更しません。

次の例は、0以上10億以下の整数が2つだけあることを検証します。

#include <iostream>

int main() {
    long long a, b;
    if (!(std::cin >> a >> b)) return 1;
    if (a < 0 || a > 1000000000 || b < 0 || b > 1000000000) return 1;
    std::cin >> std::ws;
    return std::cin.eof() ? 0 : 1;
}

「検証する」を押すと、ケースごとの結果を表示します。 TLE、MLE、OLEになったケースは「検証未完了」です。

上限と失敗時の動作

  • 入力と期待出力は、それぞれ16 MiBまでです。テストケース全体は512 MiB、100件までです。
  • 各ケースの実行は5秒、メモリ512 MiBまでで、ソースコードは64 KiBまでです。
  • 1回に生成できるのは1〜100件です。

コンパイルエラーや実行エラー、上限超過があった場合は、結果を反映せず既存のテストケースを残します。 公開中の問題とコンテストに登録した問題では、生成結果を「保存」してください。 保存した時点で、採点に使う内容が更新されます。