CF1846F Rudolph and Mimic
题目描述
这是一个交互式题目。
Rudolph 是一位研究外星生命体的科学家。在 Rudolph 面前有一个房间,里面散落着 $n$ 个不同的物体。在这些物体中,恰好有一个神奇的生物——“拟态怪”,它可以变成任何物体。它已经在房间里伪装好了,Rudolph 需要通过实验找出它。
实验分为若干个阶段,每个阶段会发生以下事情:
- Rudolph 查看房间里的所有物体,并记录它们的类型。每个物体的类型用一个数字表示;可能有多个物体属于同一类型。
- 检查后,Rudolph 可以指认他认为是拟态怪的物体。此时实验结束。Rudolph 只有一次机会,如果他不确定拟态怪的位置,则进行下一步。
- Rudolph 可以从房间中移除任意数量的物体(可以为零)。然后 Rudolph 离开房间,此时所有物体(包括拟态怪)会被混合顺序,拟态怪可以变成任何其他物体(甚至是房间中没有的物体)。
- 之后,Rudolph 返回房间,重复上述阶段。拟态怪可以选择不变形,但不能连续两个阶段都保持同一外形。
Rudolph 的任务是在不超过五个阶段内找出拟态怪。
输入格式
第一行包含一个整数 $t$ $(1 \le t \le 1000)$,表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$ $(2 \le n \le 200)$,表示房间中的物体数量。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$ $(1 \le a_i \le 9)$,表示每个物体的类型。
输出格式
在读入输入数据集描述后,你最多可以进行 $5$ 次询问。读取输入数据视为第一次阶段的开始,拟态怪可能已经开始变形。
每次请求为一行。请求类型的首字符表示操作类型。若要移除物体,输出“-”,然后输出要移除的物体数量 $k$,接着输出 $k$ 个当前房间中物体的编号。编号从 $1$ 开始。你可以移除拟态怪,但这样你将无法指认它,会得到“Wrong answer”判定。
对于移除请求,你将收到一行整数,表示移除和混合后的房间中剩余的物体。
若要指认拟态怪的位置,输出“!”,然后输出拟态怪的编号。
如果你正确指出了拟态怪的位置,则任务视为完成。
如果你进行了超过五次请求,或请求不合法,系统会返回“Wrong answer”判定。
每次输出请求或答案后,别忘了输出换行并刷新输出缓冲区,否则会得到“Idleness limit exceeded”。具体做法如下:
- C++:fflush(stdout) 或 cout.flush()
- Java:System.out.flush()
- Pascal:flush(output)
- Python:stdout.flush()
- 其他语言请查阅相关文档。
Hack 格式
你可以用如下输入格式 hack 其他解法。
第一行包含一个整数 $t$ $(1 \le t \le 1000)$,表示测试用例数量。
每个测试用例的第一行包含两个整数 $n$、$k$($2 \le n \le 200, 1 \le k \le n$),表示物体数量和拟态怪的位置。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 9$),表示初始的物体数组。
说明/提示
第一组样例解释:初始数组为 $x_1, x_2, x_3, x_4, x_5$,拟态怪在第一个位置。
- 删除第五个物体。之后,物体顺序被打乱,拟态怪选择不变形。物体顺序变为 $x_4, x_1, x_2, x_3$。
- 删除第三个物体。由于拟态怪已经连续两轮保持为 $1$,被迫变形为 $2$,物体顺序被打乱,变为 $x_3, x_4, x_1$。
- 删除第一和第二个物体。物体顺序变为 $x_1$。只剩下拟态怪,且它保持为 $2$。
- 指认第一个元素。
由 ChatGPT 4.1 翻译