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 翻译