P8126 [BalticOI 2021] The Collection Game (Day2)

题目背景

**本题是交互题。** 你的代码不需要也不应该包含 `swaps.h` 头文件,但应包含以下声明: ```cpp extern "C" void schedule(int i, int j); extern "C" std::vector visit(); extern "C" void answer(std::vector r); extern "C" void solve(int N, int Q) { // Code Here } ```

题目描述

您要参观博物馆的 $N$ 个展馆,因为您之前有入狱史(BalticOI 2021 Day2 A),所以博物馆官方仅允许您参观小于等于 $V$ 次。每一次参观您可以浏览多次,每一次浏览您可以浏览 **一对** 展馆 $(i,j)$,然后您就可以得知这两个展馆哪个展馆的艺术价值最高。为了不浪费您的时间,每一次参观每个展馆只能浏览最多一次。 不幸的是,因为您的入狱史,博物馆 **可能** 会交换您要浏览的一对展馆里的展品,这样您得到的艺术价值关系就是反过来的,您最后对这 $N$ 个展馆中的其中一个的排名也应基于 **最后一次** 对这个展馆的浏览。 现在请通过浏览来确定这 $N$ 个展馆的艺术价值的排列。 ### 交互格式 您需要实现函数 `void solve (int N, int V)`,其中 $N $ 和 $V$ 为展馆数量和最多参观次数。 `solve` 函数只被调用一次,并且可以在 `solve` 函数里面调用: - `void schedule (int i, int j)` 浏览一对展馆 $(i,j)$,博物馆有可能交换展品。 - `vector visit ()` 整理浏览结果,返回的序列按照浏览的展馆对数 $(i,j)$ 顺序返回若干个 $k$,如果第 $i$ 个展馆的艺术价值高于第 $j$ 个展馆,$k=1$,否则 $k=0$。 - `void answer (vector r)` $r$ 是一个长度为 $N$ 的序列,并且是一个 $1 \sim N$ 的排列,$r_i=p$ 代表第 $i$ 个展馆在这 $N$ 个展馆的艺术价值排序中排第 $p$ 个。 如果您函数的调用不满足要求,一次参观一个展馆浏览了超过 $1$ 次,或者参观了超过 $V$ 次,您的程序都会立即停止然后判为 `Not correct`。请不要在标准输出中输出任何东西,否则会被判为 `Security violation!`。 如果您使用 C++ 编码,请调用 swaps.h 头文件,如果您想检验您的程序的正确性,可以在下方附件中下载 sample_grader.cpp 与 swaps_sample.cpp,分别为您提供检验正确性和示例说明的作用。 如果您使用 Python 编码,可以在下方附件中下载 swaps_sample.py 检验。 交互库希望标准输入里有一行: - 一行两个整数 $N,V$。 随后,交互库会调用您的程序,最后,交互库会在标准输出中返回信息: |信息|意义| |:-:|:-:| |**Invalid input.**|标准输入的格式错误| |**Invalid schedule.**|`schedule` 函数调用无效| |**Out of visits.**|`visit` 函数调用超过 $V$ 次| |**Invalid answer.**|`answer` 函数调用无效| |**Wrong answer.**|`answer` 函数调用的 $r$ 错误| |**No answer.**|`solve` 函数没有调用 `answer` 函数| |**Correct: v visit(s) used.**|上述事件都没有发生,调用了 $V$ 次 `visit` 函数| 针对上面若干个错误的情况,交互库仅会返回 **Not correct**,或者正确的时候返回 **Correct**。每当出现上面的若干个错误,或者您的程序调用了 `answer` 函数时,程序会被自动停止。

输入格式

见「交互格式」。

输出格式

见「交互格式」。

说明/提示

#### 样例 1 解释 $N=4$,$V=50$,下面是一种合法的调用: |你的程序|返回值|博物馆是否交换 |:-:|:-:|:-:| |`schedule(1,2)`|-|否| |`schedule(3,4)`|-|是| |`visit()`|`{1,0}`|-| |`schedule(2,4)`|-|否| |`visit()`|`{1}`|-| |`answer({1,2,4,3})`|-|-| 对于上表,$r=\{2,1,4,3\}$ 也满足要求。如果第三次 `visit` 交换了,那么 $r=\{4,1,2,3\}$ 满足要求。 #### 数据规模与约定 **本题采用捆绑测试。** - Subtask 1(5 pts):$V=5000$,博物馆永远不会交换展品。 - Subtask 2(10 pts):$V \ge 1000$,博物馆永远不会交换展品。 - Subtask 3(5 pts):$N \le 100$,$V=5000$。 - Subtask 4(15 pts):$V=5000$。 - Subtask 5(15 pts):$V\ge 500$。 - Subtask 6(35 pts):$V \ge 100$。 - Subtask 7(15 pts):$V \ge 50$。 对于 $100\%$ 的数据,$1 \le N \le 500$,$50 \le V \le 5000$。 #### 说明 翻译自 [BalticOI 2021 Day2 B The Collection Game](https://boi.cses.fi/files/boi2021_day2.pdf)。