CF1807E Interview

题目描述

这是一个交互题。如果你不熟悉交互题的工作方式,建议阅读[参赛者指南](https://codeforces.com/blog/entry/45307)。 在考试的最后阶段之前,主任进行了一次面试。他给了 Gon $n$ 堆石子,第 $i$ 堆有 $a_i$ 个石子。 每块石子都是一样的,重量为 $1$ 克,除了有一块特殊的石子,它属于某一堆且重量为 $2$ 克,但具体属于哪一堆未知。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1807E/47dd63211ca258927e8a8d0a66d052f86ba7c589.png) 第一组样例的图片。第 $2$ 堆有特殊石子。各堆的重量分别为 $1,3,3,4,5$。Gon 只能向主任提出一种类型的问题:他可以选择 $k$ 堆石子,主任会告诉他所选石子的总重量。更正式地说,Gon 可以选择一个整数 $k$($1 \leq k \leq n$)和 $k$ 个不同的堆 $p_1, p_2, \dots, p_k$($1 \leq p_i \leq n$),主任会返回所选堆的总重量 $m_{p_1} + m_{p_2} + \dots + m_{p_k}$,其中 $m_i$ 表示第 $i$ 堆的重量。 Gon 的任务是找出包含特殊石子的那一堆。然而,主任很忙。请你帮助 Gon 在最多 $\mathbf{30}$ 次询问内找出这堆石子。

输入格式

输入数据包含若干组测试用例。第一行包含一个整数 $t$($1 \leq t \leq 1000$)——表示测试用例的数量。接下来是每组测试用例的描述。 每组测试用例的第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^5$)——表示石子堆的数量。 第二行包含 $n$ 个整数 $a_i$($1 \leq a_i \leq 10^4$)——表示每堆石子的数量。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。 在读取每组测试用例的输入后,按照如下方式进行交互。

输出格式

你最多可以进行 $\mathbf{30}$ 次操作来猜测特殊石子所在的堆。 每次询问,输出一行,格式如下: - $\texttt{?}\ k\ p_1\ p_2\ p_3\ ...\ p_{k-1}\ p_k$($1 \leq k \leq n$;$1 \leq p_i \leq n$;所有 $p_i$ 互不相同)——表示要查询的堆的编号。 每次操作后,你应读取一行,包含一个整数 $x$——所选堆的总重量。(形式化地,$x = m_{p_1} + m_{p_2} + \dots + m_{p_k}$。) 当你确定特殊石子所在的堆的编号时,输出一行,格式如下:$\texttt{!}\ m$($1 \leq m \leq n$)。 之后,进入下一组测试用例,或者如果没有更多测试用例则终止程序。 如果你的程序对某组测试用例进行了超过 $30$ 次操作,或进行了非法的查询,你可能会收到 Wrong Answer 判决。 每次输出查询或答案后,请记得输出换行并刷新输出缓冲区。否则,你可能会收到 Idleness limit exceeded 或其他判决。为此,请使用以下方法: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其他语言请参见相关文档。 强烈建议阅读[交互题参赛者指南](https://codeforces.com/blog/entry/45307)。 Hack 制作 Hack 时,请使用以下格式。 第一行包含一个整数 $t$($1 \leq t \leq 1000$)——表示测试用例的数量。 每组测试用例的第一行包含两个整数 $n, m$($1 \leq n \leq 2 \cdot 10^5$)——表示石子堆的数量和特殊石子所在的堆编号。 第二行包含 $n$ 个整数 $a_i$($1 \leq a_i \leq 10^4$)——表示每堆石子的数量。 注意,交互器是非自适应的,这意味着答案在选手发起询问前就已确定,并不会根据选手的询问而改变。

说明/提示

在第一组样例中,重量为二的石子位于第 $2$ 堆,如图所示。我们进行如下交互: - $\texttt{? 4 1 2 3 4}$ —— 询问第 $1$、$2$、$3$、$4$ 堆的总重量。返回的总重量为 $1+3+3+4=11$。 - $\texttt{? 2 2 3}$ —— 询问第 $2$、$3$ 堆的总重量。返回的总重量为 $3+3=6$。 - $\texttt{? 1 2}$ —— 询问第 $2$ 堆的总重量。返回的总重量为 $3$。 - $\texttt{! 2}$ —— 我们已经确定第 $2$ 堆包含特殊石子,因此输出 $2$ 并进入下一组测试用例。 在第二组样例中,重量为二的石子位于第 $7$ 堆。我们进行如下交互: - $\texttt{? 4 2 3 5 6}$ —— 询问第 $2$、$3$、$5$、$6$ 堆的总重量。返回的总重量为 $2+3+3+4=12$。 - $\texttt{? 2 1 4}$ —— 询问第 $1$、$4$ 堆的总重量。返回的总重量为 $1+5=6$。 - $\texttt{! 7}$ —— 我们已经确定第 $7$ 堆包含特殊石子,因此输出 $7$ 并结束交互。 由 ChatGPT 4.1 翻译