CF2066A.Object Identification

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

这是一道交互题。

给定一个由 11 到 nn 的整数构成的数组 x1,…,xnx_1, \ldots, x_n。评测方还拥有一个固定但隐藏的数组 y1,…,yny_1, \ldots, y_n,其元素也是 11 到 nn 的整数。数组 yy 的元素对你未知。此外,已知对于所有 ii,xi≠yix_i \neq y_i,且所有有序对 (xi,yi)(x_i, y_i) 互不相同。

评测方秘密选择了以下两个对象之一,你需要判断具体是哪一个:

  • 对象 A:一个包含 nn 个顶点(编号为 11 到 nn)的有向图,包含 nn 条形如 xi→yix_i \to y_i 的边。
  • 对象 B:坐标系上的 nn 个点,其中第 ii 个点的坐标为 (xi,yi)(x_i, y_i)。

为了猜测评测方选择的对象,你可以进行查询。每次查询需指定两个数字 i,ji, j(1≤i,j≤n,i≠j1 \leq i, j \leq n, i \neq j)。作为回应,你将得到一个数值:

  • 若评测方选择对象 A,则返回顶点 ii 到顶点 jj 的最短路径长度(以边数为单位),若无路径则返回 00。
  • 若评测方选择对象 B,则返回点 ii 与点 jj 的曼哈顿距离,即 ∣xi−xj∣+∣yi−yj∣|x_i - x_j| + |y_i - y_j|。

你最多可以进行 22 次查询来确定评测方选择的对象。

输入格式

每个测试包含多个测试用例。第一行输入测试用例数 tt(1≤t≤10001 \le t \le 1000)。随后为各测试用例的描述。

输出格式

交互开始时,首先读取 nn(3≤n≤2⋅1053 \leq n \leq 2 \cdot 10^5)——每个测试用例中数组 xx 和 yy 的长度。

接下来读取 nn 个整数:x1,x2,…,xnx_1, x_2, \ldots, x_n(1≤xi≤n1 \leq x_i \leq n)——数组 xx 的元素。

保证所有测试用例的 nn 之和不超过 2⋅1052 \cdot 10^5。

每个测试用例的数组 y1,y2,…,yny_1, y_2, \ldots, y_n 是固定的。即交互器不具有自适应性。

保证对于所有 1≤i≤n1 \leq i \leq n,有 xi≠yix_i \neq y_i,且所有有序对 (xi,yi)(x_i, y_i) 互不相同。

要进行查询,请输出 "? ii jj"(不含引号,1≤i,j≤n,i≠j1 \le i, j \le n, i \neq j)。随后需读取查询的响应值(非负整数)。

给出答案时,若隐藏对象为 A 则输出 "! A",若为 B 则输出 "! B"(不含引号)。注意输出答案不计入 22 次查询次数。

每次输出查询后,请勿忘记换行并刷新输出缓冲区∗^{\text{∗}},否则将导致超时错误。若在任何交互步骤中读取到 −1-1,必须立即终止程序。这意味着你的程序将因无效查询或其他错误而获得错误答案判定。未能及时终止可能导致不确定的评测结果,因为程序会尝试从已关闭的流中读取数据。注意若查询合法,响应值永远不会为 −1-1。

Hacks 说明

第一行必须包含整数 tt(1≤t≤10001 \le t \le 1000)——测试用例数。

每个测试用例的第一行必须包含整数 nn(3≤n≤2⋅1053 \le n \le 2 \cdot 10^5)——隐藏数组的长度。

第二行必须包含 nn 个整数——x1,x2,…,xnx_1, x_2, \ldots, x_n(1≤xi≤n1 \le x_i \le n)。

第三行必须包含 nn 个整数——y1,y2,…,yny_1, y_2, \ldots, y_n(1≤yi≤n1 \le y_i \le n)。

必须确保对于所有 1≤i≤n1 \le i \le n,有 xi≠yix_i \neq y_i,且所有有序对 (xi,yi)(x_i, y_i) 互不相同。

第四行必须包含一个字符 A 或 B,表示要隐藏的对象类型。

所有测试用例的 nn 之和不得超过 2⋅1052 \cdot 10^5。

∗^{\text{∗}} 刷新缓冲区方法:

  • C++:使用 fflush(stdout) 或 cout.flush();
  • Python:使用 sys.stdout.flush();
  • 其他语言请参考相关文档。

输入输出样例

  • 输入#1

    2
    3
    2 2 3
    
    1
    
    0
    
    5
    5 1 4 2 3
    
    4
    
    4

    输出#1

    ? 2 3
    
    ? 1 2
    
    ! A
    
    ? 1 5
    
    ? 5 1
    
    ! B

说明/提示

第一个测试用例中,x=[2,2,3]x = [2,2,3],y=[1,3,1]y = [1,3,1],隐藏对象为 A。

第二个测试用例中,x=[5,1,4,2,3]x = [5,1,4,2,3],y=[3,3,2,4,1]y = [3,3,2,4,1],隐藏对象为 B。

翻译由 DeepSeek R1 完成

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

首页