#P10553. [ICPC 2024 Xi'an I] Guess The Tree

    ID: 10005 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>2024交互题Special JudgeO2优化ICPC

[ICPC 2024 Xi'an I] Guess The Tree

Description

有一个满二叉树,具有 nn 层(因此它恰好有 2n12^n-1 个节点)。每个节点都有一个从 112n12^n-1 的整数 ID,这 2n12^n-1 个 ID 形成一个从 112n12^n-1 的排列,但你并不知道具体的排列。

你需要通过最多 48004800 次查询找到这 2n12^n-1 个节点的 ID。

Input Format

第一行包含一个整数 n(1n10)n(1\leq n\leq 10),表示满二叉树的层数。

为了进行一次查询,你需要选择两个节点,其 ID 为 u,v(1u,v2n1)u,v(1\leq u,v\leq 2^n-1),并输出如下格式的一行:

"? u v"

之后,你将收到:

"t"

uuvv 的最近公共祖先的 ID。

你最多可以进行 48004800 次查询。

如果你已经找到了树的结构,输出如下格式的一行:

"! f1 f2 f3 f4f_1\ f_2\ f_3\ f_4 ... f2n1f_{2^n-1}"

其中 fif_i 表示第 ii 个节点的父节点的 ID。如果没有父节点,则 fi=1f_i=-1

在打印查询或测试用例的答案后,不要忘记输出行尾并刷新输出。否则,你将得到「Idleness Limit Exceeded」的判定。为此,请使用:

fflush(stdout)cout.flush() 在 C++ 中;

System.out.flush() 在 Java 中;

stdout.flush() 在 Python 中。

此任务中的交互器不是自适应的。

2

3

3

3

? 1 2

? 2 3

? 1 3

! 3 3 -1

Hint

在这个例子中,树的根是 33,它的两个儿子是 1122

对于任何查询 "? a b",如果 aeqba eq b,评测系统将返回答案 33

因此我们找到了树的根是 33。(由 ChatGPT 4o 翻译)