QOJ.ac

QOJ

Limite de temps : 2.0 s Limite de mémoire : 256 MB Points totaux : 100

#18547. Nanobugs

Statistiques

在这个问题中,对于一组纳米虫,其中每只纳米虫要么是间谍(spy),要么是特工(agent),你需要在不泄露任何一只纳米虫是间谍还是特工的前提下,向他人证明间谍纳米虫的真实数量。

纳米虫是服从其主人命令的智能机器人。它们通常忙于监视、窃听或监控其他纳米虫。所有纳米虫的外观完全相同。

Bartosz 和 Vivek 是两家公司——东方卡特尔(Eastern Cartel)和南方贸易公司(Southern Trading Company)的工程师。他们需要检查东方卡特尔办公室的会议室,两家公司的代表将在那里讨论一份新合同。他们一起成功发现并抓获了 $n$ 只纳米虫。每只纳米虫要么是东方卡特尔的安全特工,要么是南方贸易公司的间谍。

Anders 是来自 SpyTek 的安全专家。他今天的任务是帮助 Bartosz 和 Vivek 确定在他们抓获的纳米虫中,间谍和特工各有多少只。对于每只纳米虫,Anders 都知道它是间谍还是特工,但其他人均不知道这一信息。

Anders 知道这些纳米虫中恰好有 $a$ 只间谍。另一方面,Bartosz 和 Vivek 仅通过标准程序得知间谍的数量要么是 $a$ 要么是 $b$,且数量 $a$ 和 $b$ 恰好相差 $1$。关于这些纳米虫,他们没有其他任何信息。

纳米虫是昂贵的智能机器,它们特别注重隐秘身份。当然,作为专家,Anders 知道每只纳米虫的主人是谁。但如果某只纳米虫的归属(即该纳米虫为哪家公司工作)被工程师或其他纳米虫知晓,该纳米虫的进一步运作(甚至其存在本身!)都将受到威胁。

作为安全专家,Anders 拥有一台可以帮助他工作的仪器:天平检测仪。这是一个带有两个腔室和一个指示灯的小盒子。使用天平检测仪非常简单:Anders 在每个腔室中放入一些纳米虫,然后按下按钮。之后,仪器会针对每家公司,检查两个腔室中归属于该公司的纳米虫数量是否相同。如果对两家公司都成立,指示灯会亮绿灯,否则亮红灯。

Anders 计划使用天平检测仪进行一系列检测。为此,他首先会按照自己喜欢的顺序将所有纳米虫排成一排。在每次检测中,Anders 会将一些纳米虫放入第一腔室,一些放入第二腔室,按下按钮,向工程师展示结果,然后将所有纳米虫放回它们在排中的原位,恢复其原始顺序。通过这种步骤,可以说在整个检测过程中,纳米虫根据它们在排中的位置被编号为 $1$ 到 $n$ 的整数。

请帮助 Anders 向工程师证明在他们抓获的 $n$ 只纳米虫中恰好有 $a$ 只间谍,并且证明的过程不能泄露任何一只纳米虫的归属;或者确定这是不可能实现的。

输入格式

输入的第一行包含三个整数 $n$,$a$ 和 $b$($20 \le n \le 50$,$1 \le a, b \le 4$,$|a - b| = 1$)。这里,$n$ 是纳米虫的总数。Bartosz 和 Vivek 知道其中有 $a$ 或 $b$ 只间谍,而 Anders 需要证明间谍的确切数量是 $a$。

输出格式

在第一行输出一个整数:检测次数 $m$($0 \le m \le 1000$),如果无法满足所有条件,则输出 $-1$。如果可以满足条件,则输出 $m$ 行,每行对应一次检测。

每次检测的描述应包含 Anders 向工程师展示的完整信息,由三部分组成: 第一部分确定哪些纳米虫被放入第一腔室:由这些纳米虫的数量开始,后跟它们以任意顺序排列的编号。 接着是一个字符,表示检测结果:=(ASCII 码 61)表示肯定结果(绿灯),或 ^(ASCII 码 94)表示否定结果(红灯)。 之后,以与第一腔室相同的格式列出放入第二腔室的纳米虫。 以上所有内容均打印在同一行中,相邻的数字或字符之间用一个或多个空格分隔。

在任何单次检测中,同一只纳米虫不能被提及两次。

说明

请注意,在任何地方都没有公开哪些纳米虫实际上是间谍,哪些是特工。此信息仅对 Anders 以及(可能对)你的程序可用。绝对不能将其泄露给任何其他方。

样例

输入样例 1

22 2 1

输出样例 1

4
6 1 2 3 4 5 6 = 6 7 8 9 10 11 12
5 13 14 15 16 21 = 5 17 18 19 22 20
3 13 14 17 ^ 3 6 8 9
1 1 ^ 2 2 3

样例说明

在样例中,工程师们知道在他们抓获的 22 只纳米虫中,有 1 只或 2 只间谍。实际上,恰好有 2 只间谍,Anders 的任务就是证明这一点。在给出的答案中,他决定进行一系列共 4 次检测。

第一次检测表明,在前 6 只纳米虫中,间谍的数量与接下来的 6 只纳米虫中的间谍数量相同。在此处及后续内容中,对于特工也是如此:如果两个腔室中的纳米虫总数相同,那么当且仅当特工数量相同时,间谍数量也相同。

在第二次检测后,我们可以得出结论:在编号为 13、14、15、16 和 21 的纳米虫中,间谍的数量与编号为 17、18、19、22 和 20 的纳米虫中的间谍数量相同。

第三次检测表明,纳米虫 13、14 和 17 中的间谍数量必然与纳米虫 6、8 和 9 中的间谍数量不同。

最后,第四次检测没有提供任何信息,因为在两个腔室中放入不同数量的纳米虫的检测总是会产生否定结果。

现在,哪些纳米虫可能是间谍?

例如,假设 Anders 最初将两只间谍放在位置 2 和 8。那么第一次检测给出了肯定结果,因为两个腔室中各有 5 只特工和 1 只间谍。第二次检测给出了肯定结果,因为两个腔室中都没有间谍。第三次检测给出了否定结果:在纳米虫 13、14 和 17 中没有间谍,但在纳米虫 6、8 和 9 中有 1 只间谍。第四次检测不依赖于间谍的位置。综上所述,所有检测都给出了所需的结果。因此,证明了存在恰好有两只间谍的可能性。

现在站在工程师的角度假设,如果实际上只有 1 只间谍,且其编号为 1。但是这样的话,第一次检测就会给出否定结果。类似地,可以证明如果只有一只间谍,且其编号为 2, 3, ..., 22 中的任意一个,则至少有一次检测会给出不同的结果。因此,Anders 证明了在纳米虫中恰好有一只间谍的情况是不可能的。回想一下,Bartosz 和 Vivek 知道间谍的数量要么是一只,要么是两只。结果表明,Anders 证明了间谍的数量恰好是两只。

剩下要检查的是没有泄露任何特工和任何间谍的身份。为此,我们可以给出一组可能的间谍排列方案,使得这些方案中的每一种在检测期间都能给出所需的结果,此外,在这些方案中,每只纳米虫在至少一种方案中是特工,且在至少一种方案中是间谍。例如,这样的一组方案中,间谍的编号可以是:(1, 8), (2, 9), (3, 8), (4, 9), (5, 8), (6, 7), (6, 10), (6, 11), (6, 12), (13, 17), (13, 18), (13, 19), (13, 20), (13, 22), (14, 18), (15, 17), (16, 17) 和 (17, 21)。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.