CF2066A.Object Identification
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是一道交互题。
给定一个由 1 到 n 的整数构成的数组 x1,…,xn。评测方还拥有一个固定但隐藏的数组 y1,…,yn,其元素也是 1 到 n 的整数。数组 y 的元素对你未知。此外,已知对于所有 i,xi=yi,且所有有序对 (xi,yi) 互不相同。
评测方秘密选择了以下两个对象之一,你需要判断具体是哪一个:
- 对象 A:一个包含 n 个顶点(编号为 1 到 n)的有向图,包含 n 条形如 xi→yi 的边。
- 对象 B:坐标系上的 n 个点,其中第 i 个点的坐标为 (xi,yi)。
为了猜测评测方选择的对象,你可以进行查询。每次查询需指定两个数字 i,j(1≤i,j≤n,i=j)。作为回应,你将得到一个数值:
- 若评测方选择对象 A,则返回顶点 i 到顶点 j 的最短路径长度(以边数为单位),若无路径则返回 0。
- 若评测方选择对象 B,则返回点 i 与点 j 的曼哈顿距离,即 ∣xi−xj∣+∣yi−yj∣。
你最多可以进行 2 次查询来确定评测方选择的对象。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数 t(1≤t≤1000)。随后为各测试用例的描述。
输出格式
交互开始时,首先读取 n(3≤n≤2⋅105)——每个测试用例中数组 x 和 y 的长度。
接下来读取 n 个整数:x1,x2,…,xn(1≤xi≤n)——数组 x 的元素。
保证所有测试用例的 n 之和不超过 2⋅105。
每个测试用例的数组 y1,y2,…,yn 是固定的。即交互器不具有自适应性。
保证对于所有 1≤i≤n,有 xi=yi,且所有有序对 (xi,yi) 互不相同。
要进行查询,请输出 "? i j"(不含引号,1≤i,j≤n,i=j)。随后需读取查询的响应值(非负整数)。
给出答案时,若隐藏对象为 A 则输出 "! A",若为 B 则输出 "! B"(不含引号)。注意输出答案不计入 2 次查询次数。
每次输出查询后,请勿忘记换行并刷新输出缓冲区∗,否则将导致超时错误。若在任何交互步骤中读取到 −1,必须立即终止程序。这意味着你的程序将因无效查询或其他错误而获得错误答案判定。未能及时终止可能导致不确定的评测结果,因为程序会尝试从已关闭的流中读取数据。注意若查询合法,响应值永远不会为 −1。
Hacks 说明
第一行必须包含整数 t(1≤t≤1000)——测试用例数。
每个测试用例的第一行必须包含整数 n(3≤n≤2⋅105)——隐藏数组的长度。
第二行必须包含 n 个整数——x1,x2,…,xn(1≤xi≤n)。
第三行必须包含 n 个整数——y1,y2,…,yn(1≤yi≤n)。
必须确保对于所有 1≤i≤n,有 xi=yi,且所有有序对 (xi,yi) 互不相同。
第四行必须包含一个字符 A 或 B,表示要隐藏的对象类型。
所有测试用例的 n 之和不得超过 2⋅105。
∗ 刷新缓冲区方法:
- 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],y=[1,3,1],隐藏对象为 A。
第二个测试用例中,x=[5,1,4,2,3],y=[3,3,2,4,1],隐藏对象为 B。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?