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