无需了解任何国际象棋规则即可解决此问题。
在无限大的棋盘(二维网格)上有 $N$ 个国王,分别位于坐标 $(X_1, Y_1), (X_2, Y_2), \dots, (X_N, Y_N)$。$N$ 以及所有国王的坐标对你来说都是未知的。但是,你已知以下信息:
- $N$ 至少为 1,至多为 $N_{\max}$。
- 没有任何国王的坐标($X$ 或 $Y$)的绝对值超过 $M$。
- $N$ 个国王位于 $N$ 个不同的单元格中。
国王们想要在棋盘上的同一个单元格会合。如果选择某个单元格 $(X, Y)$ 作为会合点,那么为了到达该点,第 $i$ 个国王需要移动的步数等于其当前坐标与会合点坐标差的绝对值的最大值:$\max(|X-X_i|, |Y-Y_i|)$。所有国王移动的总步数等于这些最大值对所有 $i$ 的求和。注意,国王在棋盘上具体如何移动与本题无关——只有起点和终点单元格重要,且移动步数总是可以通过上述公式计算得出。
本题分为两个阶段。在第一阶段,你可以重复执行以下操作:提出一个会合位置 $(A, B)$(其中 $A$ 和 $B$ 均在 $-10 \times M$ 到 $10 \times M$ 之间,包含边界),并让裁判告诉你国王们到达该点所需的总步数——即 $\sum_{i} \max(|X_i-A|, |Y_i-B|)$。你最多可以与裁判进行 $R$ 次此类交互,每次都可以选择不同的 $A$ 和 $B$。注意,国王实际上并没有移动,因此在同一个测试用例的所有请求中,它们的位置 $(X_i, Y_i)$ 保持不变。
在第二阶段,角色互换:裁判会给你一个会合单元格位置 $(C, D)$(其中 $C$ 和 $D$ 均在 $-10 \times M$ 到 $10 \times M$ 之间,包含边界),你必须回答国王们到达该点所需的总步数,假设国王的位置与第一阶段相同。此阶段最多有 $R$ 次此类交互,你必须正确回答裁判的所有请求。
输入输出
这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的部分。
程序首先读取一行,包含四个整数 $T, N_{\max}, M$ 和 $R$:测试用例数量、国王的最大数量、任何国王坐标的最大绝对值,以及每个阶段的最大请求次数。然后,你需要处理 $T$ 个测试用例。
在每个测试用例中,分为两个阶段。在第一阶段,第 $i$ 次交互如下:
- 你的程序发送一行,包含两个整数 $A_i$ 和 $B_i$,表示一个单元格的 $x$ 和 $y$ 坐标。
- $A_i$ 和 $B_i$ 必须在 $-10 \times M$ 到 $10 \times M$ 之间,包含边界。
- 裁判返回一行,包含一个整数:国王们从其未知位置到达你所选单元格所需的总步数。
在此阶段,你最多可以发起 $R$ 次此类交互。如果你发起的交互次数超过 $R$ 次,或者发送了裁判无法解析或超出范围的请求,裁判将返回一行包含字符串 ERROR。
要结束第一阶段并切换到第二阶段,你必须发送一行字符串 READY(大小写不敏感),裁判将对此返回第二阶段的第一个请求。
在第二阶段,第 $i$ 次交互如下:
- 裁判发送一行,包含两个整数 $C_i$ 和 $D_i$,表示一个单元格的 $x$ 和 $y$ 坐标。
- $C_i$ 和 $D_i$ 均在 $-10 \times M$ 到 $10 \times M$ 之间,包含边界。
- 你的程序必须返回一行,包含一个整数:国王们到达给定单元格所需的总步数。
裁判保证会发送至少 1 次且至多 $R$ 次此类请求。如果你发送的答案不正确或无法解析,裁判将返回 ERROR。如果你正确回答了所有请求,裁判将返回一行包含字符串 DONE,此时你的程序应开始处理下一个测试用例,或者在所有 $T$ 个测试用例处理完毕后终止。
如果裁判发送了 ERROR,它将不再发送任何其他输出。如果你的程序在收到 ERROR 后继续等待裁判,程序将超时并导致 Time Limit Exceeded 错误。请注意,你有责任让程序及时退出以接收 Wrong Answer 判决,而不是 Time Limit Exceeded。
限制
- 时间限制:每个测试集 60 秒。
- 内存限制:1GB。
- $1 \le T \le 15$。
- $M = 10^6$。
- $-M \le X_i \le M$,对于所有 $i$。
- $-M \le Y_i \le M$,对于所有 $i$。
- 坐标对 $(X_i, Y_i)$ 互不相同。
- $-10 \times M \le C_i \le 10 \times M$,对于所有 $i$。
- $-10 \times M \le D_i \le 10 \times M$,对于所有 $i$。
- $R = 1000$。
子任务
- 测试集 1(可见):$N_{\max} = 1$。
- 测试集 2(隐藏):$N_{\max} = 10$。
测试工具
你可以使用测试工具在本地或平台上进行测试。若要在本地测试,你需要将该工具与你的代码并行运行;可以使用我们的交互式运行器。更多信息请阅读该文件中的注释,并查看 FAQ 中的交互式问题部分。
测试工具的说明包含在工具内的注释中。我们鼓励你添加自己的测试用例。请注意,尽管测试工具旨在模拟评测系统,但它并非真实的评测系统,其行为可能有所不同。如果你的代码通过了测试工具但在真实评测中失败,请检查 FAQ 的 Coding 部分,确保你使用的编译器与我们一致。
[下载测试工具]
样例
输入格式 1
10 1 1000000 1000 3 3 2 0 READY 5 -1
输出格式 1
5 2 2 DONE
说明
此样例交互针对测试集 1,其中始终恰好有一个国王。假设裁判在第一个测试用例中决定国王位于坐标 $(1, -2)$,且请求将是 $(5, -1)$ 和 $(7, 7)$。我们的解法先检查 $(3, 3)$,然后检查 $(2, 0)$,最后在请求阶段回答错误。