QOJ.ac

QOJ

Limite de temps : 2 s Limite de mémoire : 512 MB Points totaux : 100 Interactif

#3555. 变色龙的爱

Statistiques

在 JOI 动物园里,有 $2N$ 只变色龙,编号从 $1$ 到 $2N$。其中,$N$ 只变色龙的性别为 X,其余 $N$ 只变色龙的性别为 Y。

每只变色龙都有其原始颜色。关于原始颜色,已知以下信息: $N$ 只性别为 X 的变色龙的原始颜色各不相同。 对于每只性别为 X 的变色龙,都存在唯一一只性别为 Y 的变色龙,它们具有相同的原始颜色。

现在,JOI 动物园进入了新恋情的季节。每只变色龙都爱着另一只变色龙。关于变色龙的爱,已知以下信息: 每只变色龙恰好爱着一只性别与自己不同的变色龙。 一只变色龙和它所爱的变色龙具有不同的原始颜色。 * 不存在两只变色龙爱着同一只变色龙的情况。

你可以召集部分变色龙并组织一次会议。对于每只参加会议的变色龙 $s$,设 $t$ 为 $s$ 所爱的变色龙。$s$ 的皮肤颜色决定如下: 如果 $t$ 参加了会议,$s$ 的皮肤颜色为 $t$ 的原始颜色。 如果 $t$ 没有参加会议,$s$ 的皮肤颜色为 $s$ 的原始颜色。

变色龙的皮肤颜色可能会随不同的会议而改变。对于你组织的每次会议,你可以统计参加会议的变色龙的皮肤颜色种类数。

通过组织最多 $20\,000$ 次会议,你想要确定所有具有相同原始颜色的变色龙对。

请编写一个程序,在给定变色龙数量的情况下,通过组织最多 $20\,000$ 次会议来确定所有具有相同原始颜色的变色龙对。

实现细节

你需要提交一个文件。 提交的文件名为 chameleon.cpp。它应该实现以下函数。程序应包含 chameleon.h

  • void Solve(int N) 该函数对于每个测试用例仅被调用一次。
    • 参数 $N$ 是性别为 X 的变色龙的数量。

你的程序可以调用以下函数:

  • int Query(const std::vector<int> &p) 通过调用此函数,你可以组织一次变色龙会议。

    • 参数 $p$ 是参加会议的变色龙列表。
    • 返回值为参加会议的变色龙的皮肤颜色种类数。
    • 参数 $p$ 中的每个元素都应是 $1$ 到 $2N$ 之间的整数(包含边界)。如果不满足此条件,你的程序将被判为 Wrong Answer [1]。
    • 参数 $p$ 中的元素应互不相同。如果不满足此条件,你的程序将被判为 Wrong Answer [2]。
    • 你的程序调用 Query 函数的次数不得超过 $20\,000$ 次。如果不满足此条件,你的程序将被判为 Wrong Answer [3]。
  • void Answer(int a, int b) 通过调用此函数,你回答一对具有相同原始颜色的变色龙。

    • 参数 $a$ 和 $b$ 表示变色龙 $a$ 和变色龙 $b$ 具有相同的原始颜色。
    • 必须满足 $1 \le a \le 2N$ 且 $1 \le b \le 2N$。如果不满足这些条件,你的程序将被判为 Wrong Answer [4]。
    • 对于相同的 $a$ 或 $b$ 值,你的程序调用此函数的总次数不得超过一次。如果不满足此条件,你的程序将被判为 Wrong Answer [5]。
    • 如果变色龙 $a$ 和变色龙 $b$ 的原始颜色不同,你的程序将被判为 Wrong Answer [6]。
    • 你的程序应恰好调用 Answer 函数 $N$ 次。当 Solve 函数终止时,如果调用 Answer 函数的次数不等于 $N$,你的程序将被判为 Wrong Answer [7]。

说明

  • 你的程序可以实现其他内部使用的函数,或使用全局变量。
  • 你的程序不得使用标准输入和标准输出。你的程序不得通过任何方式与其他文件通信。但是,你的程序可以将调试信息输出到标准错误。

约束

所有输入数据均满足以下条件。关于 $Y, C, L$ 的含义,请参阅样例评分器的输入格式。

  • $2 \le N \le 500$。
  • $0 \le Y_i \le 1$ ($1 \le i \le 2N$)。
  • $1 \le C_i \le N$ ($1 \le i \le 2N$)。
  • 对于每个 $j$ ($1 \le j \le N$),存在唯一的 $i$ ($1 \le i \le 2N$) 满足 $Y_i = 0$ 且 $C_i = j$。
  • 对于每个 $j$ ($1 \le j \le N$),存在唯一的 $i$ ($1 \le i \le 2N$) 满足 $Y_i = 1$ 且 $C_i = j$。
  • $1 \le L_i \le 2N$ ($1 \le i \le 2N$)。
  • $Y_i \neq Y_{L_i}$ ($1 \le i \le 2N$)。
  • $C_i \neq C_{L_i}$ ($1 \le i \le 2N$)。
  • $L_k \neq L_l$ ($1 \le k < l \le 2N$)。

子任务

  1. (4 分) $L_{L_i} = i$ ($1 \le i \le 2N$)。
  2. (20 分) $N \le 7$。
  3. (20 分) $N \le 50$。
  4. (20 分) $Y_i = 0$ ($1 \le i \le N$)。
  5. (36 分) 无附加限制。

样例通信

这里是样例评分器的一个输入示例以及对应的函数调用。

样例输入 1 样例调用
4 调用 调用 返回值
1 0 1 0 0 1 1 0 Solve(4)
4 4 1 2 1 2 3 3 Query([]) 0
4 3 8 7 6 5 2 1 Query([6, 2]) 2
Query([8, 1, 6]) 2
Query([7, 1, 3, 5, 6, 8]) 4
Query([8, 6, 4, 1, 5]) 3
Answer(6, 4)
Answer(7, 8)
Answer(2, 1)
Answer(3, 5)

在你可以从竞赛网站下载的文件中,sample-02.txt 满足子任务 1 的约束,sample-03.txt 满足子任务 4 的约束。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.