AT_abc299_d [ABC299D] Find by Query
题目描述
[problemUrl]: https://atcoder.jp/contests/abc299/tasks/abc299_d
本题是一个**交互式问题**(你的程序需要与评测程序通过标准输入输出进行交互)。
评测程序持有一个仅由 $0$ 和 $1$ 组成、长度为 $N$ 的字符串 $S = S_1S_2\ldots S_N$。字符串 $S$ 满足 $S_1 = 0$ 且 $S_N = 1$。
你只会得到 $S$ 的长度 $N$,但不会直接得到 $S$ 本身。作为替代,你可以最多向评测程序询问 $20$ 次以下问题:
- 选择一个满足 $1 \leq i \leq N$ 的整数 $i$,询问 $S_i$ 的值。
请输出一个满足 $1 \leq p \leq N-1$ 且 $S_p \neq S_{p+1}$ 的整数 $p$。
在本题的条件下,保证一定存在这样的整数 $p$。
输入格式
首先,从标准输入读取字符串 $S$ 的长度 $N$。
> $N$
接下来,你可以最多进行 $20$ 次如题目描述中的询问。
每次询问,请按照以下格式输出到标准输出。这里 $i$ 是满足 $1 \leq i \leq N$ 的整数。
> ? $i$
对于每次询问,评测程序会以如下格式返回 $S_i$ 的值:
> $S_i$
其中 $S_i$ 是 $0$ 或 $1$。
当你找到满足条件的整数 $p$ 后,请按照以下格式输出答案,并立即结束程序。
> ! $p$
如果有多个满足条件的 $p$,输出任意一个都视为正确。
输出格式
见上文。
说明/提示
### 限制条件
- $2 \leq N \leq 2 \times 10^5$
### 注意事项
- **每次输出后请在末尾加上换行符并刷新标准输出,否则可能会被判定为 TLE。**
- **如果在交互过程中输出了非法内容,或程序中途退出,评测结果将不可预测。**
- 输出答案后请立即结束程序,否则评测结果不可预测。
- 字符串 $S$ 在你与评测程序交互开始时已固定,不会因你的询问而改变。
### 输入输出样例
以下是 $N = 7, S = 0010011$ 时的输入输出示例。
输入 输出 说明
7 $N$ 的值。
? 1 向评测程序询问 $S_1$ 的值。
0 评测程序返回 $S_1 = 0$。
? 6 向评测程序询问 $S_6$ 的值。
1 评测程序返回 $S_6 = 1$。
? 5 向评测程序询问 $S_5$ 的值。
0 评测程序返回 $S_5 = 0$。
! 5 输出满足条件的整数 $p = 5$ 作为答案。
对于你输出的 $p = 5$,有 $1 \leq p \leq N-1$ 且 $S_p \neq S_{p+1}$。因此,立即结束程序即可被判定为正确。
由 ChatGPT 4.1 翻译