#L3041. 「JOISC 2019 Day4」矿物

「JOISC 2019 Day4」矿物

题目描述

题目译自 JOISC 2019 Day4 T3「鉱物 / Minerals」

JOI 教授的实验室正在研究 NN 种矿物。每种矿物有两个样本,一共有 2N2N 个样本,编号为 12N1 \sim 2N

一天,助手 Bitaro 不小心弄掉了这个装有 2N2N 个样本的箱子,他不知道哪两个样本是同一种矿物的样本了。

这个实验室有一台设备,可以通过测量每种矿物吸收光的波长,统计出插入这个设备的矿石种类数。Bitaro 决定利用这台设备给这 2N2N 个样本中属于相同矿石种类的两两配对。起初,设备中没有矿石样本。Bitaro 可以如下操作:

  • 向设备中插入一个矿石样本,Bitaro 可以知道设备中有多少种矿石样本;
  • 从设备中拔出一个矿石样本,Bitaro 可以知道设备中有多少种矿石样本;

这样 JOI 教授就不会找 Bitaro 的麻烦了。Bitaro 总共可以操作最多 10610^6 次。

给出矿物种类数,写一个程序,利用这台设备给相同矿物种类样本配对。


实现细节

你需要提交一个文件,包含 minerals.h 并使用以下函数:

void Solve(int N)

对于每组数据,这个函数调用且仅调用一次。参数 NN 代表矿物种类数。

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

int Query(int x)

对于你通过参数 xx 指定的样本编号 xx,必须保证 1x2N1 \le x \le 2N,否则程序将被判为 Wrong Answer [1]
Query() 函数不能调用超过 10610^6 次,否则程序将被判为 Wrong Answer [2]

void Answer(int a, int b)

利用这个函数,你可以回答相同矿石种类的矿石样本编号,意味着 aabb 号样本矿石种类相同。必须保证 1a,b2N1 \le a,b \le 2N,否则程序将被判为 Wrong Answer [3];如果重复回答同一对矿石,将被判为 Wrong Answer [4],如果 aabb 并不属于同一种矿石,将被判为 Wrong Answer [5]

Answer() 函数必须被调用 NN 次,否则程序将被判为 Wrong Answer [6]


输入格式

交互程序从标准输入中读入以下内容:

  • 第一行一个正整数 NN,表示矿石种类数;
  • 接下来 NN 行,每行两个正整数 Xi,YiX_i, Y_i,表示编号为 XiX_iYiY_i 的矿石种类相同。

输出格式

交互程序将向标准输出输出以下内容:

  • 如果你的程序正确,将输出 Accepted: 100
  • 否则,将输出类似 Wrong Answer [1] 的内容。如果有多种错误,程序将只输出一个。

样例

样例输入

4
1 5
2 6
3 4
7 8

样例交互过程

调用 返回值
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)

数据范围与提示

对于全部数据,1N4.3×1041 \le N \le 4.3 \times 10^41Xi,Yi2N1 \le X_i, Y_i \le 2N,保证每一个数对两两本质不同。

详细子任务附加条件及分值如下表:

子任务 附加限制 分值
1 N100N \le 100 6
2 N1.5×104N \le 1.5 \times 10^41XiN1 \le X_i \le NN+1Yi2NN+1 \le Y_i \le 2N (1iN)(1 \le i \le N) 25
3 N1.5×104N \le 1.5 \times 10^4 9
4 N3.8×104N \le 3.8 \times 10^4 30
5 N3.9×104N \le 3.9 \times 10^4 5
6 N4.0×104N \le 4.0 \times 10^4
7 N4.1×104N \le 4.1 \times 10^4
8 N4.2×104N \le 4.2 \times 10^4
9 无附加限制