CF1896G Pepe Racing

题目描述

这是一个交互题。 有 $n^2$ 个 pepe,编号为 $1, 2, \ldots, n^2$,它们的速度两两不同。你希望通过安排若干场比赛,来确定这些 pepe 的相对速度。 在一场比赛中,你可以选择恰好 $n$ 个不同的 pepe 进行比赛。每场比赛结束后,你只会知道这 $n$ 个 pepe 中最快的那个。 你能否在最多 $2n^2 - 2n + 1$ 场比赛内,将速度最快的 $n^2-n+1$ 个 pepe 按速度从快到慢排序?注意,最慢的 $n-1$ 个 pepe 彼此无法区分。 注意,交互器是自适应的。也就是说,pepe 的相对速度在一开始并不是固定的,可能会根据你的查询动态变化。但保证在任何时刻,至少存在一种初始配置,使得所有查询的答案都是一致的。

输入格式

每个测试点包含多组测试数据。第一行包含测试组数 $t$($1 \le t \le 10^4$)。接下来是每组测试数据的描述。 每组测试数据的唯一一行包含一个整数 $n$($2 \le n \le 20$),表示每场比赛中参与的 pepe 数量。 在读取每组测试数据的 $n$ 后,你应当开始与交互器进行交互。 保证所有测试数据中 $n^3$ 的总和不超过 $3 \cdot 10^5$。

输出格式

每次安排一场比赛时,输出一行,格式如下: - $\mathtt{?}\,x_1\,x_2 \ldots x_n$($1 \le x_i \le n^2$,$x_i$ 互不相同),表示这场比赛中参与的 pepe 编号。 每场比赛后,你需要读取一行,包含一个整数 $p$($1 \le p \le n^2$),表示这场比赛中最快的 pepe 的编号。 当你确定了速度最快的 $n^2-n+1$ 个 pepe 后,输出一行,格式如下: - $\mathtt{!}\,p_1\,p_2 \ldots p_{n^2 - n + 1}$($1 \le p_i \le n^2$,$p_i$ 互不相同),$p$ 为这 $n^2-n+1$ 个 pepe 的编号,按速度从快到慢排列。 之后进入下一组测试数据,若没有更多测试数据则终止程序。 如果你在某组测试数据中进行了超过 $2n^2 - 2n + 1$ 场比赛,或进行了无效的比赛,你可能会收到 Wrong Answer 判定。 每次输出后不要忘记换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 判定。具体方法如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其它语言请查阅相关文档。 Hack 格式 对于 Hack,使用如下格式。 第一行包含 $t$,表示测试组数。 每组测试数据的第一行包含一个整数 $n$,后跟字符串 manual。 每组测试数据的第二行包含一个长度为 $n^2$ 的排列 $a_1,a_2,\ldots,a_{n^2}$,为 $1$ 到 $n^2$ 的一个排列。若 $a_i > a_j$,则 pepe $i$ 的速度快于 pepe $j$。 例如,样例输入的 Hack 格式为:$\mathtt{1}\\\mathtt{2}~\mathtt{manual}\\\mathtt{1}~\mathtt{2}~\mathtt{3}~\mathtt{4}$

说明/提示

由 ChatGPT 4.1 翻译