CF1987H.Fumo Temple

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这座神殿只会放大山的力量。

Badeline

这是一个交互题。

你将得到两个正整数 nn 和 mm($ \mathbf{n \le m} $)。

评测器为你隐藏了一个 nn 行 mm 列的矩阵 aa,其中对于所有 1≤i≤n1 \le i \le n 且 1≤j≤m1 \le j \le m,都有 ai,j∈{−1,0,1}a_{i,j} \in \{-1, 0, 1\}。评测器还选定了一个格子 (i0,j0)(i_0, j_0)。你的目标是找出 (i0,j0)(i_0, j_0)。

每次询问,你可以给出一个格子 (i,j)(i, j),评测器会回复一个整数。

  • 如果 (i,j)=(i0,j0)(i, j) = (i_0, j_0),评测器回复 00。
  • 否则,设 SS 为所有满足 min⁡(i,i0)≤x≤max⁡(i,i0)\min(i, i_0) \le x \le \max(i, i_0) 且 min⁡(j,j0)≤y≤max⁡(j,j0)\min(j, j_0) \le y \le \max(j, j_0) 的 ax,ya_{x,y} 的和。评测器将回复 ∣i−i0∣+∣j−j0∣+∣S∣|i - i_0| + |j - j_0| + |S|。

你需要通过不超过 n+225n + 225 次询问找出 (i0,j0)(i_0, j_0)。

注意:评测器是非自适应的,即 aa 和 (i0,j0)(i_0, j_0) 在所有询问前就已确定。

输入格式

每个测试包含多组数据。输入的第一行为一个整数 tt(1≤t≤501 \le t \le 50)——表示测试用例的数量。接下来是每组测试用例的描述。

每组测试用例的唯一一行包含两个整数 nn 和 mm(1≤n≤m≤50001 \le n \le m \le 5000)——隐藏矩阵 aa 的行数和列数。

保证所有测试用例的 n⋅mn \cdot m 之和不超过 25⋅10625 \cdot 10^6。

输出格式

每组测试用例的交互以读取 nn 和 mm 开始。

每次询问,输出 "? i j"(1≤i≤n,1≤j≤m1 \le i \le n, 1 \le j \le m),不带引号。随后,你应读取一个整数——本次询问的回复。

如果你收到 −1-1 作为回复,或者收到的 nn 或 mm 不合法,说明你的程序进行了非法询问、超出了询问次数限制,或在前一组测试用例中给出了错误答案。你的程序必须立即终止,否则会收到 Wrong Answer 判定。否则,你的程序继续从已关闭的流读取数据,可能会得到任意判定。

当你准备给出最终答案时,输出 "! i j"(1≤i≤n,1≤j≤m1 \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 时请使用如下格式:

第一行一个整数 tt(1≤t≤501 \le t \le 50)——测试用例数量。

每组测试用例的第一行包含两个整数 nn 和 mm(1≤n≤m≤50001 \le n \le m \le 5000)——隐藏矩阵的大小。

第二行包含两个整数 i0i_0 和 j0j_0(1≤i0≤n,1≤j0≤m1 \le i_0 \le n, 1 \le j_0 \le m)——隐藏格子的下标。

接下来 nn 行,每行一个长度为 mm 的字符串 sis_i,仅包含字符 -, 0, +。其中 aij=−1a_{ij} = -1 若 sij=−s_{ij} = \mathtt{-},aij=0a_{ij} = 0 若 sij=0s_{ij} = \mathtt{0},aij=1a_{ij} = 1 若 sij=+s_{ij} = \mathtt{+}。

所有测试用例的 n⋅mn \cdot m 之和不超过 25⋅10625 \cdot 10^6。

例如,样例输入的 hack 格式为:

23 41 4+0+0+00+0---1 11 10\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

    2
    3 4
    
    5
    
    3
    
    5
    
    1 1
    
    0

    输出#1

    ? 1 1
    
    ? 3 3
    
    ? 3 2
    
    ! 1 4
    
    ? 1 1
    
    ! 1 1

说明/提示

第一组样例的隐藏矩阵为:

11 00 11 0\color{red}{\textbf{0}}
11 00 00 11
00 −1-1 −1-1 −1-1

第二组样例的隐藏矩阵为:

0\color{red}{\textbf{0}}

注意,样例输入输出中的换行仅为便于展示,实际交互中不会出现。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页