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 翻译