No.3627 Share the Median
問題文
この問題はコミュニケーション問題(あなたの作成したプログラムが複数プロセスで動作し、ジャッジシステムとの入出力を介して対話を行う形式の問題)です。
$2$ 人のプレイヤー Alice, Bob が協力ゲームを行います。
Alice は長さ $N$ の整数列 $A = (A_1, A_2, \cdots, A_N)$ を持っており、 Bob は長さ $M$ の整数列 $B = (B_1, B_2, \cdots, B_M)$ を持っています。
ここで、 $N + M$ が奇数となる入力のみが与えられます。
Alice と Bob は双方の持っている整数列の長さを知っています。ただし、 $A$ の各要素の値は Alice のみが知っており、 $B$ の各要素の値は Bob のみが知っています。
Alice と Bob は、情報共有を高々 $Q$ 回繰り返すことができます。 $1$ 回の情報共有は以下のような一連の手続きです。
- Alice は $1 \leq i \leq N$ を満たす整数 $i$ を、 Bob は $1 \leq j \leq M$ を満たす整数 $j$ を選ぶ。
- Alice には $B_j$ の値が、 Bob には $A_i$ の値が同時に知らされる。
情報共有を繰り返した後、 Alice と Bob は $(A_1, A_2, \cdots, A_N, B_1, B_2, \cdots, B_M)$ の中央値を同時に解答します。(これは情報共有の回数には含まれません。)
双方の解答した答えがどちらも正しい結果であったとき、ゲームは成功します。そうでないとき、ゲームは失敗します。
ゲームに成功するように振る舞ってください。では、始めましょう。
中央値とは
$n$ が奇数のとき、長さ $n$ の数列 $X = (X_1, X_2, \cdots, X_n)$ の中央値とは、 $X$ を昇順に並べたときの $(n + 1) / 2$ 番目の値です。
制約
- $\color{red}Q = 12$ または $\color{red}Q = 1000$
- $1 \leq N, M \leq 1000$
- $N + M$ は奇数
- $1 \leq A_i, B_j \leq 10^9$
- $Q, N, M, A_i, B_j$ は整数
部分点
この問題にはサブタスクによる部分点が設定されています。
| サブタスク名 | 配点 | 制約 |
|---|---|---|
| Easy | 20%(60点) | $Q = 1000$ |
| Hard | 80%(240点) | $Q = 12$ |
入出力
この問題はコミュニケーション問題(あなたの作成したプログラムが複数プロセスで動作し、ジャッジシステムとの入出力を介して対話を行う形式の問題)です。
Alice として振る舞うあなたのプログラムと Bob として振る舞うあなたのプログラムが、ジャッジプログラムを介してゲームを行います。
ゲームの開始
まず、あなたのプログラムに対して以下の形式で入力が与えられるので、受け取ってください。
$\mathrm{player}$
$Q$
$N$ $M$
$X_1$ $X_2$ $\ldots$ $X_L$
-
$\mathrm{player}$ は文字列
Aliceまたは文字列Bobであり、以下のように説明される。- $\mathrm{player} =$
Aliceのとき、これ以降あなたのプログラムは Alice として振る舞わなければならない。 - $\mathrm{player} =$
Bobのとき、これ以降あなたのプログラムは Bob として振る舞わなければならない。
- $\mathrm{player} =$
- 情報共有を高々 $Q$ 回行うことができる。
- Alice として振る舞っているとき、 $L = N$ を満たしており、 $A = (X_1, X_2, \cdots, X_L)$ であることを表す。
- Bob として振る舞っているとき、 $L = M$ を満たしており、 $B = (X_1, X_2, \cdots, X_L)$ であることを表す。
その後、ゲームのルールに従って、情報共有と解答のいずれかの行動を選ぶことを繰り返してください。
情報共有
情報共有を行う場合、以下の形式で出力してください。
share $k$
- Alice として振る舞っているとき、 $k$ は $1 \leq k \leq N$ を満たす整数である必要がある。 $i = k$ として Bob に $A_i$ を知らせる。
- Bob として振る舞っているとき、 $k$ は $1 \leq k \leq M$ を満たす整数である必要がある。 $j = k$ として Alice に $B_j$ を知らせる。
この操作は相手が情報共有を行うまで待ちますが、以下のいずれかを満たしたときゲームに失敗します。
- $Q$ 回を超過して情報共有を行った。
- 自分または相手がプログラムを終了した。
- 自分が情報共有を選んだにも関わらず、相手が解答を選んだ。
- 自分または相手が正しい形式で情報共有を行わなかった。
このとき、与えられる入力は $-1$ となります。この場合、すでに不正解と判定されているため、ただちにプログラムを終了してください。
双方が正しく情報共有を行った場合、以下の形式で入力が与えられます。
$v$
Alice として振る舞っているとき、 $v = B_j$ です。 Bob として振る舞っているとき、 $v = A_i$ です。
解答
解答を行う場合、以下の形式で出力してください。
answer $m$
ここで、 $m$ は $(A_1, A_2, \cdots, A_N, B_1, B_2, \cdots, B_M)$ の中央値である必要があります。この出力は情報共有の回数には含まれません。
その後、ただちにプログラムを終了してください。
注意点
- 出力を行うたびに、末尾に改行を入れて標準出力を flush してください。そうしなかった場合、ジャッジ結果が TLE となる可能性があります。
- 解答を行ったら(または $-1$ を受け取ったら)ただちにプログラムを終了してください。そうしなかった場合、ジャッジ結果は不定です。
- 余計な改行は不当な形式の出力とみなされることに注意してください。
- 本問題の実行時間制限 $1000$ [ミリ秒]、メモリ制限が $512$ [MB] であることに注意してください。
サンプル
サンプル
| Alice の入力 | Alice の出力 | Bob の入力 | Bob の出力 | 説明 |
|---|---|---|---|---|
Alice123 21 5 3 | Bob123 24 2 | 情報共有の上限回数 $Q = 12$ です。Alice には $N, M, A$ 、 Bob には $N, M, B$ が与えられます。 $N = 3, ~ M = 2$ であり、 $A = (1, 5, 3), ~ B = (4, 2)$ です。 |
||
share 2 |
share 1 |
Alice は $i = 2$ を、 Bob は $j = 1$ を情報共有します。 | ||
4 | 5 | Alice には $4 ~ (= B_1)$ が、 Bob には $5 ~ (= A_2)$ が知らされます。 | ||
share 3 |
share 2 |
Alice は $i = 3$ を、 Bob は $j = 2$ を情報共有します。 | ||
2 | 3 | Alice には $2 ~ (= B_2)$ が、 Bob には $3 ~ (= A_3)$ が知らされます。 | ||
answer 3 |
answer 3 |
Alice と Bob が双方とも $3$ と解答します。 これは正しい答えであり、かつ情報共有の回数が $Q$ 以下であるため、ゲームに成功します。 |
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。
ぽえ
kazuppa