P7211 [JOISC 2020] カメレオンの恋
题目背景
您可以在如下的代码模板中编写程序:
```cpp
#include
using namespace std;
extern "C" int Query(const std::vector &p);
extern "C" void Answer(int a, int b);
extern "C" void Solve(int N) {
}
```
题目描述
在 JOI 动物园中,有 $2\times N$ 只变色龙,有 $N$ 只的性别为 $\rm X$,另外 $N$ 只的性别为 $\rm Y$。
每一只变色龙均有其原始颜色,其约束如下:
- $\rm X$ 性别的变色龙颜色两两不同。
- 对于每一只 $\rm X$ 性别的变色龙,都有一只 $\rm Y$ 性别的变色龙颜色与之相同。
现在每一只变色龙都爱另一只变色龙了,具体规则如下:
- 每一只变色龙只爱异性变色龙。
- 每只变色龙与其喜欢的变色龙有不同的初始颜色。
- 不会存在两只变色龙爱一只变色龙。
现在您可以组织一些变色龙开会,对于每一只在会议中的变色龙 $s$,设 $s$ 爱的变色龙为 $t$。
- 若 $t$ 参加会议,则 $s$ 的皮肤颜色为 $t$ 的原始颜色。
- 否则,$s$ 的皮肤颜色为 $s$ 的原始颜色。
对于您组织的每次会议,您可以统计不同的肤色数量。
通过召开不超过 $2\times 10^4$ 次会议,您要确定初始颜色相同的每一对变色龙。
#### 交互细节
您需要在程序前声明两个函数:
- `int Query(const std::vector &p)`。
- `void Answer(int a, int b)`。
您需要实现一个函数:`void Solve(int N)`。
- 每个测试样例仅调用一次。
- $N$ 的意义如题。
你的程序可以调用如下函数:
- `int Query(const std::vector &p)`
- 您可以调用此函数来组织变色龙会议。
- $p$ 是参加会议的变色龙名单。
- 这会返回参加会议的变色龙颜色的种数。
- 所有 $p$ 内的数必须在 $1$ 到 $2\times N$ 之间,不然会返回 `Wrong Answer [1]`。
- 所有 $p$ 内的数必须是两两不同的,不然会返回 `Wrong Answer [2]`。
- 您只能调用此函数 $2\times 10^4$ 次,若超过,会返回 `Wrong Answer [3]`。
- `void Answer(int a, int b)`
- 调用这个函数来提交一对原始颜色相同的变色龙。
- 参数 $a$ 和 $b$ 表示变色龙 $a$ 和 $b$ 具有相同的初始颜色。
- 您需要保证 $1\le a,b\le 2\times N$,否则会返回 `Wrong Answer [4]`。
- 您需要保证每一次提交的变色龙不同,否则会返回 `Wrong Answer [5]`。
- 如果您提交的 $a$ 和 $b$ 的初始颜色不同,会返回 `Wrong Answer [6]`。
- 您需要调用 $N$ 次该函数,否则会返回 `Wrong Answer [7]`。
如果您在交互过程中均未违反限制,恭喜您 AC 了。
输入格式
交互库输入格式如下:
第一行为一个整数 $N$。
第二行为 $2\times N$ 个整数 $Y_i$,表示变色龙的性别,$Y_i=0$,则性别为 $\rm X$,$Y_i=1$,则性别为 $\rm Y$。
第三行为 $2\times N$ 个整数 $C_i$,$C_i$ 表示变色龙 $i$ 的颜色。
第四行为 $2\times N$ 个整数 $L_i$,$L_i$ 表示变色龙 $i$ 稀饭变色龙 $L_i$。
输出格式
交互库输出格式如下:
若您 AC 了,则输出一行 `Accepted: x`,$x$ 是您调用 `int Query(const std::vector &p)` 的次数。
若您 WA 了,则输出一行 `Wrong Answer [type]`,$type$ 是您 WA 的原因,可参照交互细节。
说明/提示
#### 样例解释
样例调用如下:
| 交互库调用 | 你的调用 | 返回值 |
| :-: | :-: | :-:|
| `Solve(4)` | | |
| | `Query([])` | $0$ |
| | `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` 符合 Subtask 1 的限制,`sample-03.txt` 符合 Subtask 4 的限制。
#### 子任务
对于 $100\%$ 的数据,保证 $2\le N\le 500$,$0\le Y_i\le 1$,$1\le C_i\le N$,$1\le L_i\le 2\times N$,$Y_i\not=Y_{L_i}$,$C_i\not=C_{L_i}$,$L$ 两两不同。
| 子任务 | 特殊性质 | 分数 |
| :-: | :-: | :-: |
| $1$ | $L_{L_i}=i (1\le i\le 2\times N)$ | $4$ |
| $2$ | $N\le 7$ | $20$ |
| $3$ | $N\le 50$ | $20$ |
| $4$ | $Y_i=0 (1\le i\le N)$ | $20$ |
| $5$ | 无 | $36$ |
#### 说明
本题译自 [第 19 回日本情報オリンピック 春季トレーニング合宿](https://www.ioi-jp.org/camp/2020/2020-sp-tasks/index.html) Day 2 [T1 カメレオンの恋](https://www.ioi-jp.org/camp/2020/2020-sp-tasks/day2/chameleon-en.pdf)。