CF1299E So Mean
题目描述
本题为交互题。
我们隐藏了一个 $1$ 到 $n$ 的排列 $p_1, p_2, \dots, p_n$,其中 $n$ 是偶数。你可以通过以下查询来猜测这个排列:
$?$ $k$ $a_1$ $a_2$ $\dots$ $a_k$。
你将会得到这些下标 $a_1, a_2, \dots, a_k$ 所对应元素的平均值是否为整数的反馈。换句话说,如果 $\frac{p_{a_1} + p_{a_2} + \dots + p_{a_k}}{k}$ 是整数,你会收到 $1$,否则收到 $0$。
你的任务是猜出这个排列。你最多可以进行 $18n$ 次查询。
注意,排列 $[p_1, p_2, \dots, p_k]$ 和 $[n + 1 - p_1, n + 1 - p_2, \dots, n + 1 - p_k]$ 是无法区分的。因此,保证 $p_1 \le \frac{n}{2}$。
注意,排列 $p$ 在交互开始前就已确定,并不会根据你的查询改变。也就是说,交互器是非自适应的。
你不需要最小化查询次数。
输入格式
第一行包含一个整数 $n$($2 \le n \le 800$,$n$ 为偶数)。
输出格式
你首先读入 $n$。
每次你想查询下标 $a_1, a_2, \dots, a_k$ 的元素时,在单独一行输出
$?$ $k$ $a_1$ $a_2$ ... $a_k$
查询中的数字需满足 $1 \le a_i \le n$,且所有 $a_i$ 互不相同。不要忘记刷新输出,否则会因超时被判为“Idleness limit exceeded”。各语言刷新方法如下:
- C++:fflush(stdout) 或 cout.flush()
- Java:System.out.flush()
- Pascal:flush(output)
- Python:stdout.flush()
- 其它语言请查阅相关文档。
你会收到 $1$,如果 $\frac{p_{a_1} + p_{a_2} + \dots + p_{a_k}}{k}$ 是整数,否则收到 $0$。
如果你的查询不合法或查询次数超过 $18n$,程序会输出 $-1$ 并终止交互。此时你会收到 Wrong answer 判定,请立即退出以避免其它判定。
当你确定排列后,输出
$!$ $p_1$ $p_2$ ... $p_n$
说明/提示
由 ChatGPT 4.1 翻译