#G0151. MAD序列【2026暑假集训T1】

MAD序列【2026暑假集训T1】

题目描述

本题为交互题。

有一个秘密序列 a1,a2,,a2n1,a2na_1, a_2, \ldots, a_{2n-1},a_{2n} ,其中包含从 11nn 的每个整数 ii,且每个数字出现恰好两次

你的任务是通过以下类型的查询猜出这个序列:

  • ?? k j1 j2  jkk \space j_1 \space j_2 \space \ldots \space j_k ,选择整数 kk ( 1k2n1 \le k \le 2n ) 和 kk 个两两不同的位置 j1,j2,,jkj_1, j_2, \ldots, j_k ( 1j1,j2,,jk2n1 \le j_1 , j_2 , \ldots , j_k \le 2n )。交互器将返回 MAD([aj1,aj2,,ajk])\text{MAD}([a_{j_1}, a_{j_2}, \ldots, a_{j_k}])

我们将整数序列的 MAD\operatorname{MAD} (Maximum Appearing Duplicate)定义为至少出现两次最大整数。具体来说,如果没有至少出现两次的数字, MAD\operatorname{MAD} 值就是 00 。下面是一些例子:

  • MAD([1,2,1])=1\operatorname{MAD}([1, 2, 1]) = 1 ;
  • MAD([2,2,3,3])=3\operatorname{MAD}([2, 2, 3, 3]) = 3 ;
  • MAD([1,2,3,4])=0\operatorname{MAD}([1, 2, 3, 4]) = 0 .

请最多使用 qq 次查询找出秘密序列。

输入格式

输入的第一行包含一个正整数 tt,表示测试数据组数。对于每组测试数据:

输入的第一行包含一个正整数 nn,含义如上所述。

输出格式

对于每组测试数据,输出 2n2n 个正整数表示 aia_i 的值。

注意,这题是交互式的。换句话说,交互器会在你输出一行后,才给你下一条信息。

每输出一,务必换行并刷新缓冲区,否则会得到 Wrong answer(答案错误)、Runtime error(运行错误)、Idleness limit exceeded(超时)等判定。

刷新缓冲区的方法:

  • C++ 用 fflush(stdout) 或 cout.flush();

交互式

要进行查询,请按以下格式输出一行:

  • ?? k j1 j2  jkk \space j_1 \space j_2 \space \ldots \space j_k ( 1k2n,1j1,j2,,jk2n1≤k≤2n , 1≤j_1,j_2,…,j_k≤2n)

这里,您选择的索引 j1,j2,,jkj_1,j_2,…,j_k 必须是 两两不同的

然后,在每次查询后,读取一个整数,即查询的答案。

您最多可以进行 qq 次此类查询,对于不同的子任务,qq 的要求不同。

如果您的程序找到了序列 aa ,请按以下格式打印该行(不带引号):

  • !! $a_1 \space a_2 \space … \space a_{2n−1} \space a_{2n}$ (1ain1≤a_i≤n)

请注意,这不计入查询限制。

之后,进入下一个测试用例,如果这是最后一个测试用例,则退出。

此任务中的交互器是非自适应。换句话说,在交互过程中,序列 aa 不会发生变化。

如果在交互过程中进行的查询次数超过 qq ,程序必须立即终止,并将收到错误答案判决。否则,您可能会收到任意非正确的判决,因为您的解决方案将继续从封闭流中读取数据。

打印完每一行后,不要忘记输出行尾并刷新输出缓冲区。否则,您将收到 "超过闲置限制 "的判决。要刷新缓冲区:

  • C++ 用 fflush(stdout) 或 cout.flush();
2
2

2

0

1

2

0

1

1


? 2 2 1

? 2 1 3

? 3 1 3 4

! 2 2 1 1

? 2 1 2

? 2 1 3

? 3 1 3 4

! 1 2 1 2

样例解释

在第一个测试数据中,隐藏序列为 a=[2,2,1,1]a=[2,2,1,1]

对于查询 ? 2 2 1? \space 2 \space 2 \space 1,交互器返回 22 ,因为 $\operatorname{MAD}([a_2, a_1]) = \operatorname{MAD}([2, 2]) = 2$ 。

对于查询 ? 2 1 3? \space 2 \space 1 \space 3,交互器会返回 00 ,因为 $\operatorname{MAD}([a_1, a_3]) = \operatorname{MAD}([2, 1]) = 0$ 。

对于查询 ? 3 1 3 4? \space 3 \space 1 \space 3 \space 4,交互器返回 11 ,因为 $\operatorname{MAD}([a_1, a_3, a_4]) = \operatorname{MAD}([2 ,1, 1]) = 1$ 。

请注意,示例交互仅用于理解语句,并不能保证找到唯一序列 aa

数据规模与约定

有合理的子任务依赖。

子任务编号 nn\leq q=q= 分值
11 2020 400400 2020
22 5050 700700 3030
33 3×1023 \times 10^2 900900 5050

对于 100%100\% 的数据:保证 t300,2n300,n2100000t \leq 300,2 \leq n \leq 300,\sum n^2 \leq 100000