CF2001C.Guess The Tree

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

这是一道交互题。

Misuki 有一棵结构未知,具有 nn 个节点的树,节点编号从 $ 1 $ 到 $ n $ ,并要求你写一份代码来猜测它。

你可以询问以下问题:

? a b

其中 a,ba,b 为两个节点的编号。

对于一次询问,Misuki 会告诉你哪个节点 xx 能最小化 ∣d(a,x)−d(b,x)∣|d(a,x)-d(b,x)| 的值,其中 d(x,y)d(x,y) 是节点 xx 和 yy 之间的距离。如果存在多个这样的节点,Misuki 会告诉你最小化 d(a,x)d(a,x) 的节点。

现要求你使用不超过 15n15n 次的询问,来确定这棵树的结构。

输入格式

本题有多组测试数据。 第一行一个正整数 tt ,代表测试样例的个数,$1 \le t \le 200 $。

对于每组测试数据,一行一个正整数 nn(2≤n≤10002 \le n \le 1000),代表树中的节点数。

保证所有测试数据中 nn 的总和不超过 10001000。

输出格式

交互从读取整数 nn 开始,
然后你最多可以进行 15n15n 次查询。在每个查询后,读取一个整数作为查询的答案。

要输出答案,请按如下格式输出:

!a1a_1 b1b_1 a2a_2 b2b_2 ... an−1a_{n-1} bn−1b_{n-1}

这意味着对于 1≤i≤n−11 \le i \le n-1,节点 $ a_i $ 和 $ b_i $ 之间有一条边。你可以按任意顺序输出边。

在进行 15n15n 次查询后,若再进行查询,将读取到 −1-1 。收到 −1-1 后,请终止程序以接收 Wrong Answer 判定。

输入输出样例

  • 输入#1

    1
    4
    1
    1
    3

    输出#1

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

说明/提示

打印每一行后(即进行一次询问或输出一次答案后),请输出回车并刷新输出缓冲区。可刷新输出缓冲区的有:

  • C++ 中的 fflush(stdout) 或 cout.flush();
  • Java 中的 System.out.flush();
  • Pascal 中的 flush(output);
  • Python 中的 stdout.flush();
  • 对于其他语言,请参阅其他语言的文档。

Translated by @ARIS2_0

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

首页