#P14351. [JOISC 2019] 矿物 / Minerals
[JOISC 2019] 矿物 / Minerals
题目背景
在洛谷上提交本题,需要定义函数 int Query(int x);、void Answer(int a, int b); 而非引用头文件 minerals.h。
题目描述
JOI 教授的实验室正在研究 种矿物。每种矿物有 2 片样本,总共有 片样本,编号从 到 。
某天,助手 Bitaro 不慎将装有这 片样本的盒子打翻,他已无法分辨哪两片样本属于同一种矿物。
实验室拥有一种设备,可通过测量每种矿物吸收的波长,来统计设备内当前包含的矿物种类数量。Bitaro 的任务是从 片样本中找出所有 对同种矿物。初始时,设备内没有放入任何样本。Bitaro 可执行以下操作:
- 将一片样本插入设备中,Bitaro 会得知设备内当前包含的矿物种类数量。
- 从设备中取出一片样本,Bitaro 会得知设备内当前包含的矿物种类数量。
为避免被 JOI 教授发现 Bitaro 惹出麻烦,他总共最多只能执行 次操作。
请编写一个程序,给定矿物种类数 ,利用该设备,找出所有同种矿物的配对。
实现细节
程序应实现以下函数:
void Solve(int N)
此函数在每个测试用例中恰好被调用一次。- 参数 表示矿物种类的数量。
你的程序可以调用以下函数:
int Query(int x)
对于你指定的样本编号 ,若该样本已在设备中,则将其取出;否则将其插入设备中。然后返回设备中当前包含的矿物种类数量。- 你通过参数 指定样本编号,必须满足 。否则,你的程序将被判定为 Wrong Answer [1]。
- 函数
Query的调用次数不得超过 次。否则,你的程序将被判定为 Wrong Answer [2]。
void Answer(int a, int b)
使用此函数,你将输出同种矿物的配对。- 参数 和 表示第 片样本与第 片样本属于同一种矿物。它们必须满足 且 。否则,你的程序将被判定为 Wrong Answer [3]。
- 若在 或 中,同一数值出现超过一次,你的程序将被判定为 Wrong Answer [4]。
- 若指定的样本属于不同种类的矿物,你的程序将被判定为 Wrong Answer [5]。
函数 Answer 必须恰好被调用 次。若在函数 Solve 执行结束时,对 Answer 的调用次数不等于 ,你的程序将被判定为 Wrong Answer [6]。
重要提示
- 你的程序可以为内部使用实现其他函数,或使用全局变量。
- 你的程序不得使用标准输入和标准输出,也不得通过任何方式与其他文件通信。但你的程序可以向 stderr 输出调试信息。
编译与测试运行
你可以从竞赛网页下载一个归档文件,其中包含用于测试你程序的样例评测器。该归档文件还包含你程序的样例源代码文件。
样例评测器是文件 grader.cpp。为测试你的程序,请将 grader.cpp、minerals.cpp 和 minerals.h 放在同一目录下,并运行以下命令编译你的程序:
g++ -std=gnu++14 -O2 -o grader grader.cpp minerals.cpp
当编译成功后,将生成可执行文件 grader。
请注意,实际评测器与样例评测器不同。样例评测器将以单进程方式运行,从标准输入读取输入数据,并将结果写入标准输出。
输入格式
样例评测器从标准输入读取以下数据:
其中, 和 ()表示第 片样本与第 片样本属于同一种矿物。
输出格式
当程序成功终止时,样例评测器将以下信息写入标准输出(引号仅用于清晰说明):
- 若你的程序被判定为正确,它将输出调用函数
Query的次数,格式为 “Accepted: 100”。 - 若你的程序被判定为 Wrong Answer,它将输出其类型,格式为 “Wrong Answer [1]”。
若你的程序被判定为多种类型的 Wrong Answer,样例评测器仅报告其中一种。
4
1 5
2 6
3 4
7 8
提示
样例 1 解释
| 调用 | 返回值 | |
|---|---|---|
Solve(4) |
||
Query(1) |
1 | |
Query(2) |
2 | |
Query(5) |
||
Query(2) |
1 | |
Answer(3, 4) |
(无) | |
Answer(5, 1) |
||
Answer(8, 7) |
||
Answer(2, 6) |
||
数据范围
关于 和 的定义,请参阅“样例评测器的输入”部分。
- 。
- ()。
- ()。
- ()。
- ()。
- (,)。
子任务
- (6 分)。
- (25 分),且对所有 ,满足 ,。
- (9 分)。
- (30 分)。
- (5 分)。
- (5 分)。
- (5 分)。
- (5 分)。
- (10 分)无额外约束。