CF1386A Colors

题目描述

Linda 喜欢不时更换自己的发色,如果她的男友 Archie 能注意到她发色的变化,她会很高兴。Archie 只有在他注意到发色和上一次不同的时候才会发表评论——所以 Linda 总能知道 Archie 是否发现了变化。 现在市面上有一款新的染发剂系列,所有可用的颜色都用整数 $1$ 到 $N$ 编号,编号差值越小,视觉上的差异也越小。 Linda 认为,对于这个系列,应该存在一个临界色差 $C$($1 \le C \le N$),如果当前颜色 $\mathrm{color}_{\mathrm{new}}$ 和上一次颜色 $\mathrm{color}_{\mathrm{prev}}$ 满足 $|\mathrm{color}_{\mathrm{new}} - \mathrm{color}_{\mathrm{prev}}| \ge C$,Archie 就会注意到颜色的变化;如果 $|\mathrm{color}_{\mathrm{new}} - \mathrm{color}_{\mathrm{prev}}| < C$,则不会注意到。 现在 Linda 已经购买了 $N$ 套新系列的染发剂——每种颜色各一套,准备进行实验。Linda 会定期更换发色,并观察 Archie 是否注意到颜色的变化。由于每套染发剂只能用一次,每种颜色最多只能染一次。 实验开始前,Linda 使用的是另一系列的染发剂,与新系列不兼容,因此第一次使用新颜色时 Archie 的反应没有意义。 她的目标是在有限的染发次数内,精确找出 $C$ 的值。请编写程序,通过实验并观察 Archie 的反应,在给定的 $N$ 种颜色中找出 $C$ 的值。

输入格式

本题为交互题。首先输入一个整数 $T$($1 \leq T \leq 100$),表示测试用例的数量。 对于每个测试用例,首先输入一个整数 $N$($1 < N \le 10^{18}$)。$C$ 的值由评测系统保密。 然后你的程序需要进行若干次查询,每次输出格式为:“? $P$”,其中 $P$ 是下一个要使用的颜色编号($1 \le P \le N$)。每次查询后,评测系统会返回一行输入,若 Archie 注意到颜色变化则返回 $1$,否则返回 $0$。同一个 $P$ 不能重复查询。 当你的程序确定 $C$ 的值后,输出“= $C$”即可。评测系统不会对此输出作出回应,而是进入下一个测试用例。 每个测试用例最多允许使用 64 次“?”查询来确定 $C$ 的值。 为保证程序与评测系统的正常通信,每次查询后请刷新输出流。 $$ \begin{array}{ll} \text{语言} & \text{刷新命令} \\ \hline \text{C++} & \texttt{std::cout

输出格式

本题为交互题。每次查询输出“? $P$”,每次确定答案输出“= $C$”。每次查询后需刷新输出流。

说明/提示

示例输入每行注释说明: 1. $N = 7$。 2. 第一次查询的答案无意义(也可能是 $0$)。 3. $C \leq 5$。 4. $3 < C \leq 5$。此时建议检查差值为 $4$,但下一个查询不能用 $4+4=8$ 或 $4-4=0$,因为都超出了 $1 \le P \le 7$ 的范围。 5. $3 < C \leq 5$。 6. $3 < C \leq 4$。因此,$C = 4$。 由 ChatGPT 4.1 翻译