問題一覧 > 通常問題

No.2252 Find Zero

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / リアクティブ問題 (詳しくはこちら
タグ : / 解いたユーザー数 143
作問者 : shobonvip / テスター : noya2 👑 Nachia
1 ProblemId : 9074 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-03-23 21:18:19

問題文

この問題はインタラクティブ問題です。

整数 NN が与えられます。しょぼん君は (0,1,,N1)(0,1,\cdots, N-1) の順列 P=(P0,P1,,PN1)P = (P_0, P_1, \cdots, P_{N-1}) を持っています(添字が 00 から始まることに注意してください)。

しょぼん君は恥ずかしがり屋なので、順列 PP をあなたに見せることはできません。その代わり、以下の質問に N2\lfloor \frac{N}{2} \rfloor 回まで答えてくれます。ここで、実数 xx に対して x\lfloor x \rfloorxx を超えない最大の整数とします。

  • 0x,y<N0 \le x, y \lt N を満たす整数の組 (x,y)(x, y) を選び、Pz=(Px+Py)%NP_{z} = (P_x + P_y) \% N を満たす zz の値を聞く。ただし、整数 ss と正整数 tt に対して、s%ts \% tsstt で割ったあまりとする。なお、Pz=(Px+Py)%NP_{z} = (P_x + P_y) \% N を満たす zz は必ず存在し、それがただ 11 つであることが示される。

Pk=0P_k = 0 を満たす kk を当ててください。なお、順列 PP はテストケースを通して固定されており、質問によって変わることはありません。

制約

  • 3N10003 \le N \le 1000
  • 入力はすべて整数

入出力

最初に、順列の長さ NN が与えられます。

NN

その後、あなたは質問することができます。

質問は、以下の形式で標準出力に出力してください。

? xx yy

質問に対する応答は、次の形式で標準入力から与られます。

zz

ただし, zzPz=(Px+Py)%NP_z = (P_x + P_y) \% N を満たします。

Pk=0P_k = 0 を満たす kk が分かったら、以下の形式で標準出力に出力してください。

! kk

注意

  • 出力のたびに必ず標準出力を flush してください。
  • 不正な出力が行われた場合は不正解になりますが、ジャッジの結果は未定義であり、WA になるとは限りません。
  • ! k を出力した後は、プログラムをすぐに終了させてください。
リアクティブ問題に慣れてない方は、リアクティブ形式の問題についてのまとめ もご覧ください。

サンプル

入力出力説明
5まず NN が入力として与えられます。
? 3 1Pz=(P3+P1)%5P_z = (P_3 + P_1) \% 5 を満たす zz の値を聞きます。
0P0=(P3+P1)%5P_0 = (P_3 + P_1) \% 5 だったので、 00 が返されます。
? 0 0Pz=(P0+P0)%5P_z = (P_0 + P_0) \% 5 を満たす zz の値を聞きます。
1P1=(P0+P0)%5P_1 = (P_0 + P_0) \% 5 だったので、 11 が返されます。
! 252=2\lfloor \frac{5}{2} \rfloor = 2 であり、すでに 22 回質問したので、これ以上質問することはできません。
どういうわけか P2=0P_2 = 0 だと分かったらしいので、! 2 を出力します。

以上のサンプルで、しょぼん君の持っている順列は P=(1,2,0,4,3)P = (1, 2, 0, 4, 3) でした。

たとえば 11 番目の質問 ? 3 1 については、(P3+P1)%5=(4+2)%5=1(P_3 + P_1) \% 5 = (4 + 2) \% 5 = 1 であり、P0=1P_0 = 1 であるので、00 が返されます。

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