問題一覧 > ショートコード

No.5000 特殊ジャッジテスト(テスト用)

レベル : / 実行時間制限 : 1ケース 5.000秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 200
作問者 : yuki2006
ProblemId : 374 / 自分の提出
問題文最終更新日: 2026-04-14 18:52:06

作問者向けNote 2026/04/13 更新

スペシャルジャッジ・リアクティブの検証コードの実行の仕様です。
    実行コマンド (問題の入力ファイルパス) (問題の出力ファイルパス) (提出されたソースコードのパス) (スコアファイルのパス)
    
    (標準入力に提出コードでの標準出力が渡される)
実行コマンドの例です。
    ./a.out test_in/1.txt ans/1.txt main.ws score/1.txt < out/1.txt

検証コード実装例

検証コードで気をつけないといけないのは、提出コードでの標準出力には言語によりCR(改行コード: キャリッジリターン)が含まれる可能性があるので、可能な限りケアするようにしてください。
特にC++のstd::getline はジャッジ環境ではCRを解釈してくれません。
参考 std::getlineについての覚書
同じように他のCRを考慮しないものがあればご提案ください。

上記の形式で実行されます。つまり引数は4つ以上(今後増やす可能性はあります)です。
検証コードがランタイムエラー(Exit Codeが0以外。例えばassertなどで終了)になるとWAになります。
検証コードがTLEするとJ_TLEになりますが、なるべくならないようにしてください。
リアクティブジャッジの場合、検証コードがランタイムエラーかつ、ユーザーコードがTLEの時はWAになります。
Exit Codeを100としてプログラムを終了させるとQLEになります。(2019/11/14 追加 暫定案)

その他RETLEなどの判定は通常のチェッカーが使われます。

スペシャルジャッジ・リアクティブどちらもテスト出力ファイルをおいてください。空ファイル(0バイトのファイル)で十分ですが、 解の1例をおいておくと良いかもしれません。
リアクティブ問題の(検証コードに対する)入力は、問題の「テスト入力ファイル」においてください。
検証コードでの標準エラー出力は自由に出してもらっても構いません。
リアクティブ問題に関して

リアクティブ問題は純コード判定は行われません。

コミュニケーション問題に関して

コミュニケーション問題はリアクティブ形式の一種で、同じプログラムが2プロセスで動作します。
ジャッジコード(検証コード)が各プロセスの入出力をパイプで仲介し、プロセス間の通信を制御します。

パイプ構成

コミュニケーション問題では、ジャッジプロセスに以下のファイルディスクリプタ(FD)が割り当てられます。

    プロセス1 (stdout) --→ FD3 (ジャッジからの読み取り)
    プロセス1 (stdin)  ←-- FD4 (ジャッジからの書き込み)
    プロセス2 (stdout) --→ FD5 (ジャッジからの読み取り)
    プロセス2 (stdin)  ←-- FD6 (ジャッジからの書き込み)
FD方向接続先用途
FD3読み取りプロセス1 の stdoutプロセス1 が出力したデータをジャッジが読む
FD4書き込みプロセス1 の stdinジャッジからプロセス1 にデータを送る
FD5読み取りプロセス2 の stdoutプロセス2 が出力したデータをジャッジが読む
FD6書き込みプロセス2 の stdinジャッジからプロセス2 にデータを送る

参考: FD0〜2はリアクティブと同様です。FD0(stdin)にはテスト入力ファイルの内容、FD1(stdout)・FD2(stderr)はジャッジコードの出力用です。

ジャッジコードはFD3〜FD6を使って2つのユーザープロセスと通信します。
通常の標準入力(FD0)にはリアクティブと同様にテスト入力ファイルの内容が渡されます。
引数もリアクティブと同じ形式です。

ユーザープロセスは通常通り標準入力(stdin)から読み、標準出力(stdout)に書きます。
FD番号を意識するのはジャッジコード側のみです。

ジャッジコードの実装例(Python)
import os, sys

# FD3-6でユーザープロセスと通信
user1_read  = os.fdopen(3, 'r')  # プロセス1の出力を読む
user1_write = os.fdopen(4, 'w')  # プロセス1に入力を送る
user2_read  = os.fdopen(5, 'r')  # プロセス2の出力を読む
user2_write = os.fdopen(6, 'w')  # プロセス2に入力を送る

# テスト入力は標準入力から
test_input = sys.stdin.read()

# プロセス1に初期データを送信
user1_write.write("1 ...\n")  # プレイヤー1の入力
user1_write.flush()

# プロセス2に初期データを送信
user2_write.write("2 ...\n")  # プレイヤー2の入力
user2_write.flush()

# 以降、両プロセスの出力を読み取り、相手に転送するなどの処理を行う

コミュニケーション問題のジャッジコード実装では、以下の点に注意してください。

  • FD3〜FD6を使用する(標準入出力はテストファイル用)
  • 書き込み後は必ずflush()する
  • 1つのプロセスが不正な出力をした場合、他のプロセスがデッドロックしないよう配慮する
  • メモリ使用量は2つのユーザープロセスの最大値で判定される
  • どちらかのユーザープロセスが異常終了した場合、その終了コードが使われる

コミュニケーション問題は純コード判定は行われません。


スコアについて(β)
問題編集ページで問題の種類を「スコア問題」に選択すると、問題ページ上部に「スコア順」のタブが現れます。
「スコア順」タブはACになっている提出で、各ユーザーの最高点の提出(かつ提出IDが小さい提出)が表示されます。
スコア問題では、暫定的に提出制限を設けており、同じ問題の最後の提出(CE以外)から5分以内に提出できないようにしております。

この時に、スコアファイルに出力した値がスコアとして、各テストケースの合計として集計されます。
スコアファイルは、64ビット符号付き整数の値を出力してください。(末尾改行も許容)
(合計もオーバーフローしないように気をつけてください。)

64ビット整数値を使えますが、桁が多いと見にくいので多くても9桁あたりが望ましいと思います。
スコアを小さい順で表したいときは、その旨を問題文に明記して、マイナスをかけるといいかと思います。
大抵は何も意識せずにファイルを開き書き込めばいいと思いますが、「その他ユーザー」に書き込み権限を与えないように気をつけてください。

なお、「スコア問題」にすると自動的に「ACで公開」はしないになります。
スコア問題の難易度は0で良いと思います。
スコア問題は純コード判定は行われません。

問題文

整数$N$が与えられるので
$A+B=N$となる、整数$A,B$を出力してください。

ただし、想定の答えと同じだと不正解になる。
(ヒント:想定の答えは必ず$A=1$であるようだ。)
さらにソースコード中に"random"という文字があると間違いとなる。
(制限ジャッジのテスト)

また、各ケース1000 - コード長の合計がスコアになる。

ただし$A,B$は、
$-2147483648 \le A,B \le 2147483647$
の範囲とする。

入力

N

入力は整数で与えられる。
$-1000 \le N \le 1000=10^3$

出力

A B

$A+B=N$になるような$A,B$をこのフォーマットに合うように出力してください。

サンプル

サンプル1
入力
5
出力
2 3

2+3=5
です。

サンプル2
入力
10
出力
10 0

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。