CF744B Hongcow's Game

题目描述

这是一个交互题。在下面的交互部分,你将看到关于输出刷新(flush)的信息。 在本题中,你将和 Hongcow 玩一个游戏。你很幸运! Hongcow 有一个隐藏的 $n \times n$ 的矩阵 $M$。令 $M_{i,j}$ 表示矩阵中第 $i$ 行第 $j$ 列的元素。行和列的编号都从 $1$ 到 $n$。 矩阵中的元素值在 $0$ 到 $10^{9}$ 之间。此外,所有有效的 $i$ 都满足 $M_{i,i}=0$。你的任务是找出每一行上(不包括对角线上的元素)的最小值。形式化地说,对于每个 $i$,你需要找出 $$ \min_{j \neq i} M_{i, j} $$ 为此,你可以向 Hongcow 提一些问题。 一个问题包括:你给 Hongcow 一个由不同下标组成的子集 $\{w_1, w_2, \ldots, w_k\}$,其中 $1 \leq k \leq n$。Hongcow 会回复你 $n$ 个整数。第 $i$ 个整数是 $\min_{1 \leq j \leq k} M_{i, w_j}$。 你最多只能问 Hongcow $20$ 个问题——他认为你只需要这么多就够了。 当你准备好提交答案时,输出一行只包含整数 $-1$,然后在下一行输出 $n$ 个整数,第 $i$ 个整数表示矩阵第 $i$ 行除去对角线元素后的最小值。别忘了最终也要刷新输出。输出答案不算为一次提问。 如果你出现以下情况会被判为 Wrong Answer : - 你的问题或答案没有按照描述的格式给出。 - 你严格超过 $20$ 次提问。 - 你的问题中包含重复的下标。 - 你的问题中的 $k$ 不在 $1$ 到 $n$ 的范围内。 - 你提交的最终答案不正确。 如果你没有输出任何内容,或者忘记刷新输出(包括最终答案),会被判为 Idleness Limit Exceeded(超时)。

输入格式

输入的第一行包含一个整数 $n$,其中 $2 \leq n \leq 1,000$。

输出格式

提交最终答案时,先输出一行只包含 $-1$。然后在下一行输出 $n$ 个整数。第 $i$ 个整数表示矩阵第 $i$ 行去掉对角线元素后的最小值。不要忘了刷新输出! ## 交互方式 提问时,先输出一行一个整数 $k$,表示你子集的大小。接着输出一行 $k$ 个整数 $w_1, w_2, \ldots, w_k$。注意:你必须刷新输出后才能获取回复。 Hongcow 会回复你一行 $n$ 个整数。其中第 $i$ 个数字表示 $\min_{j=1}^k M_{i, w_j}$。 你最多只能提问 $20$ 次,否则会被判为 Wrong Answer。 你可以在下述语言环境中使用下列方法刷新输出: - C++:fflush(stdout) - Java:System.out.flush() - Python:stdout.flush() - Pascal:flush(output) 详见官方文档。 ## Hack 格式 Hack 时输入格式如下: ``` n M_{1,1} M_{1,2} ... M_{1,n} M_{2,1} M_{2,2} ... M_{2,n} ... M_{n,1} M_{n,2} ... M_{n,n} ``` 当然,参赛选手的程序是无法看到这些输入的。

说明/提示

在第一个样例中,Hongcow 的隐藏矩阵为: ``` [ [0, 3, 2], [5, 0, 7], [4, 8, 0], ] ``` 下面是一个更清晰的交互示例。左边一列表示 Hongcow,右边一列表示选手操作。 ``` 3 3 1 2 3 0 0 0 1 3 2 7 0 2 1 2 0 0 4 1 2 3 0 8 1 1 0 5 4 -1 2 5 4 ``` 对于第二个样例,矩阵的非对角线元素也可能为零。 由 ChatGPT 5 翻译