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