atcoder#ABC299D. [ABC299D] Find by Query

[ABC299D] Find by Query

配点 : 400400

問題文

この問題は インタラクティブな問題(あなたが作成したプログラムとジャッジプログラムが標準入出力を介して対話を行う形式の問題)です。

ジャッジが 0011 のみからなる長さ NN の文字列 S=S1S2SNS = S_1S_2\ldots S_N を持っています。 文字列 SS は、S1=0S_1 = 0 および SN=1S_N = 1 を満たします。

あなたには SS の長さ NN が与えられますが、SS 自体は与えられません。 その代わり、あなたはジャッジに対して以下の質問を 2020 回まで行うことができます。

  • 1iN1 \leq i \leq N を満たす整数 ii を選び、SiS_i の値を尋ねる。

1pN11 \leq p \leq N-1 かつ SpSp+1S_p \neq S_{p+1} を満たす整数 pp11 個出力してください。 なお、本問題の条件下でそのような整数 pp が必ず存在することが示せます。

制約

  • 2N2×1052 \leq N \leq 2 \times 10^5

入出力

最初に、文字列 SS の長さ NN を標準入力から受け取ってください。

N

次に、あなたはジャッジに対して問題文中の質問を 2020 回まで繰り返すことができます。

質問は、以下の形式で標準出力に出力してください。 ここで、ii1iN1 \leq i \leq N を満たす整数でなければなりません。

? i

これに対する応答として、SiS_i の値が次の形式で標準入力から与えられます。

S_i

ここで、SiS_i00 または 11 です。

問題文中の条件を満たす整数 pp を見つけたら、解答を以下の形式で出力してください。 その後、ただちにプログラムを終了してください。

! p

答えが複数ある場合、どれを出力しても正解とみなされます。

注意点

  • 出力を行うたびに、末尾に改行を入れて標準出力を flush してください。そうしなかった場合、ジャッジ結果が TLE となる可能性があります。
  • 対話の途中で不正な出力を行った、あるいはプログラムが途中で終了した場合のジャッジ結果は不定です。
  • 解答を出力したらただちにプログラムを終了してください。そうしない場合、ジャッジ結果は不定です。
  • 文字列 SS はあなたとジャッジの対話の開始時に固定され、あなたが行った質問などに応じて変更されることはありません。

入出力例

以下は、N=7,S=0010011N = 7, S = 0010011 の場合の入出力例です。

入力 出力 説明
7 NN が与えられます。
? 1 S1S_1 が何かをジャッジに質問します。
0 質問に対する答えとして S1=0S_1 = 0 がジャッジから返されます。
? 6 S6S_6 が何かをジャッジに質問します。
1 質問に対する答えとして S6=1S_6 = 1 がジャッジから返されます。
? 5 S5S_5 が何かをジャッジに質問します。
0 質問に対する答えとして S5=0S_5 = 0 がジャッジから返されます。
! 5 問題文中の条件を満たす整数 pp として、p=5p = 5 を解答します。

解答した p=5p = 5 について、1pN11 \leq p \leq N-1 かつ SpSp+1S_p \neq S_{p+1} が成り立ちます。 よって、この後ただちにプログラムを終了することで、正解と判定されます。