No.2502 Optimization in the Dark
タグ : / 解いたユーザー数 35
作問者 :



問題文
この問題はインタラクティブ問題です。
上下にカードが積まれた山が つあります。 つの山にはそれぞれ番号 が振られています。
各山は、表面に つの整数が書かれた 枚のカードからなります。山 の上から 番目のカードに書かれた整数を とします。
各カードは表面を下にして積まれているので、あなたは の値を知りません。ただし、次の事実が成り立つことは分かっています。
- 各山のカードは上から下に向けて昇順に並んでいる。つまり、 を満たす任意の整数 に対して、 が成り立つ。
さて、あなたは今から [ゲーム] をします。[ゲーム] は次の手順で進行します。
[ゲーム]
- とする。
- つの山のうち空でないものの個数を とする。
- ならば、ゲームを終了する。
- ならば、 と更新してゲームを終了する。
- ならば、あなたは つの空でない山 を任意に選択する。選択した つの山から、それぞれ一番上に積まれているカードを取り除く。このとき取り除いた 枚のカードに書かれている整数を として、 と更新して 2 に戻る。
あなたの目標はゲーム終了時の をできるだけ小さくすることです。ただし、ゲーム開始前にあなたは 高々 回だけ 次のような [質問] をすることができます。
[質問]
- を満たす整数 を選択し、 が成り立つかどうかを質問する。
山札の情報を全て知っている場合 (つまり、全ての が既知の場合) に達成しうる ゲーム終了時の の最小値を とします。
ゲーム終了時の がちょうど と一致するような操作の手順を つ求めてください。
なお、本問題のジャッジは適応的ではありません。つまり、各 の値は初めに固定されいて、途中で変化することはありません。
入出力
はじめに、正整数 が次の形式で 行に標準入力から与えられます。
あなたは 高々 回だけ [質問] を行うことができます。[質問] において選択した整数 を次の形式で標準出力に出力してください。改行もしてください。ここで、 は 以上 以下の整数であり、かつ は 以上 以下の整数でなければなりません。
?
この [質問] に対して、 が成り立つ場合は Yes
が、成り立たない場合は No
が 行に標準入力から与えられます。 の場合も No
が与えられることに注意してください。
高々 つの [質問] を終えたら、ゲーム終了時の がちょうど と一致するような操作の手順を次の形式で標準出力に出力してください。改行もしてください。ここで、 に対して は 回目の操作で選択する つの山の番号であり、相異なる 以上 以下の整数でなければなりません。なお、ちょうど 回の操作終了時に山札が全て空となり、かつ を満たすような操作手順が存在することを証明できます。
!
答えの出力を終えたら、直ちにプログラムを終了してください。
制約
- は 以上 以下の整数
- カードに書かれた値は 以上 以下の整数
注意
- 出力を行うたびに末尾に改行を入れて標準出力を flush してください。そうしなかった場合のジャッジ結果は不定です。
- 不正な出力を行った場合や規定の質問回数を超えた場合、あるいはプログラムが途中で終了した場合のジャッジ結果は不定です。特に、プログラムの実行中に実行時エラーが起こった場合のジャッジ結果は RE とは限りません。
サンプル
以下は で が次のように決まっている場合の入出力例です。ただし、実際には は入力として与えられない ことに注意して下さい。
Input | Output | 説明 |
---|---|---|
1 |
はじめに が入力として与えられます。 | |
? 2 1 1 1 |
であり、 かどうかを聞く [質問] を表します。 | |
No |
より です。 | |
? 1 2 3 1 |
であり、 かどうかを聞く [質問] を表します。 | |
Yes |
より です。 | |
! 2 3 1 3 1 2 |
回目の操作で山札 を選択し、 回目の操作で山札 を選択し、 回目の操作で山札 を選択することでゲームは終了し、ゲーム終了時の の値は となります。 であることを証明できるので、この出力は正答です。 |
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。