CF1987H Fumo Temple

题目描述

这座神殿只会放大山的力量。 Badeline 这是一个交互题。 你将得到两个正整数 $n$ 和 $m$($ \mathbf{n \le m} $)。 评测器为你隐藏了一个 $n$ 行 $m$ 列的矩阵 $a$,其中对于所有 $1 \le i \le n$ 且 $1 \le j \le m$,都有 $a_{i,j} \in \{-1, 0, 1\}$。评测器还选定了一个格子 $(i_0, j_0)$。你的目标是找出 $(i_0, j_0)$。 每次询问,你可以给出一个格子 $(i, j)$,评测器会回复一个整数。 - 如果 $(i, j) = (i_0, j_0)$,评测器回复 $0$。 - 否则,设 $S$ 为所有满足 $\min(i, i_0) \le x \le \max(i, i_0)$ 且 $\min(j, j_0) \le y \le \max(j, j_0)$ 的 $a_{x,y}$ 的和。评测器将回复 $|i - i_0| + |j - j_0| + |S|$。 你需要通过不超过 $n + 225$ 次询问找出 $(i_0, j_0)$。 注意:评测器是非自适应的,即 $a$ 和 $(i_0, j_0)$ 在所有询问前就已确定。

输入格式

每个测试包含多组数据。输入的第一行为一个整数 $t$($1 \le t \le 50$)——表示测试用例的数量。接下来是每组测试用例的描述。 每组测试用例的唯一一行包含两个整数 $n$ 和 $m$($1 \le n \le m \le 5000$)——隐藏矩阵 $a$ 的行数和列数。 保证所有测试用例的 $n \cdot m$ 之和不超过 $25 \cdot 10^6$。

输出格式

每组测试用例的交互以读取 $n$ 和 $m$ 开始。 每次询问,输出 "? i j"($1 \le i \le n, 1 \le j \le m$),不带引号。随后,你应读取一个整数——本次询问的回复。 如果你收到 $-1$ 作为回复,或者收到的 $n$ 或 $m$ 不合法,说明你的程序进行了非法询问、超出了询问次数限制,或在前一组测试用例中给出了错误答案。你的程序必须立即终止,否则会收到 Wrong Answer 判定。否则,你的程序继续从已关闭的流读取数据,可能会得到任意判定。 当你准备给出最终答案时,输出 "! i j"($1 \le i \le n, 1 \le j \le m$),不带引号,表示隐藏格子的下标。解决完一组测试用例后,应立即进入下一组。所有测试用例结束后,程序应立即终止。 每次输出后不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 判定。具体做法如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其它语言请查阅相关文档。 Hack 格式 Hack 时请使用如下格式: 第一行一个整数 $t$($1 \le t \le 50$)——测试用例数量。 每组测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \le m \le 5000$)——隐藏矩阵的大小。 第二行包含两个整数 $i_0$ 和 $j_0$($1 \le i_0 \le n, 1 \le j_0 \le m$)——隐藏格子的下标。 接下来 $n$ 行,每行一个长度为 $m$ 的字符串 $s_i$,仅包含字符 -, 0, +。其中 $a_{ij} = -1$ 若 $s_{ij} = \mathtt{-}$,$a_{ij} = 0$ 若 $s_{ij} = \mathtt{0}$,$a_{ij} = 1$ 若 $s_{ij} = \mathtt{+}$。 所有测试用例的 $n \cdot m$ 之和不超过 $25 \cdot 10^6$。 例如,样例输入的 hack 格式为: $\texttt{2}\\ \texttt{3}\,\texttt{4} \\ \texttt{1}\,\texttt{4} \\ \texttt{+0+0} \\ \texttt{+00+} \\ \texttt{0---} \\ \texttt{1}\,\texttt{1}\\\texttt{1}\,\texttt{1}\\\texttt{0}$

说明/提示

第一组样例的隐藏矩阵为: $1$ $0$ $1$ $\color{red}{\textbf{0}}$ $1$ $0$ $0$ $1$ $0$ $-1$ $-1$ $-1$ 第二组样例的隐藏矩阵为: $\color{red}{\textbf{0}}$ 注意,样例输入输出中的换行仅为便于展示,实际交互中不会出现。 由 ChatGPT 4.1 翻译