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