リアクティブ形式の問題についてのまとめ

Latest Author yuki2006 /Date 2015-11-11 18:41:47 / Views 2084
0 (Favした一覧ページはユーザーページから)
リアクティブ形式の問題についてまとめておきます。

リアクティブ形式の問題とは

リアクティブ形式の問題は通常の問題と異なり、ジャッジ側のプログラムと対話的に実行する必要がある問題です。
そのため、未知の情報について質問により推定を行ったり、相手とゲームで対戦して勝利する必要があったり、渡されるクエリをリアルタイムに処理したりする必要があります。

リアクティブ形式の問題における注意点

便宜上、提出したプログラムのことを回答プログラム、ジャッジ側のプログラムのことを応答プログラムと呼ぶことにします。

応答プログラムが入力を受け取ろうとしているときに入力プログラムも入力を受け取ろうとすることによってデッドロックが発生し不正解になってしまうことがよくあります。
また、標準出力に書き込んだつもりが、実際には書き込まれておらずこのような状況に陥ることもあります。出力後は必ずflushするようにしましょう。
同様に出力を受け取らなかったために、デッドロックが発生してしまい、不正解になってしまうこともあります。注意しましょう。

当然のことですが、正しいフォーマットで出力しなかった場合、不正解になってしまいます。こちらもよく確認しましょう。

問題例

リアクティブ問題に慣れましょう。コードを書いて、提出ページでコードを提出してみましょう。
便宜上、未知の情報を推定するタイプの問題を推定型、ゲームを行うタイプの問題を対戦型、渡されるクエリをリアルタイムに処理するタイプの問題をリアルタイム処理型と呼ぶことにします。

推定型の問題

No.246 質問と回答(★★)

No.253 ロウソクの長さ(★★★)

No.282 おもりと天秤(2)(★★★)

対戦型の問題

No.257 N言っちゃダメゲーム(3)(★★)

リアルタイム処理型の問題

まだありません。

作問時の注意点

リアクティブ問題は通常の問題と異なり、入出力にかかる時間、より正確には書き込みを行うのにかかる時間が非常に大きいです。だいたい10000回程度のやりとりで数秒かかるものと考えるのが良いでしょう。
リアルタイム処理型の問題を作る場合はこちらに十分注意しましょう。

また、通常の問題に比べてデバッグが困難になる傾向が多いです。サンプル等は詳細に書いた方が良いでしょう。