提交注意事项:
- 不要引入头文件
library.h
- 在文件头粘贴如下的内容:
#include <vector>
int Query(const std::vector<int>& M);
void Answer(const std::vector<int>& res);
数百年后,JOI 城市已成废墟。探险家 IOI-chan 正在探索曾经建造图书馆的区域。根据勘探结果,已知以下信息:
- 图书馆的书架上共有 本书。这些书从左到右排成一列。
- 这 本书编号为 至 。但书架上书籍的排列顺序可能与书的编号顺序不同。
- 通过一次操作,可以一次性取走书架上连续放置的若干本书。
不幸的是,IOI-chan 未能在图书馆中找到旧书。但她发现了一台管理图书馆书架操作的机器。如果我们指定一个或多个书的编号并向机器发送查询,机器会返回仅取走这些书所需的最少操作次数。
IOI-chan 希望通过向机器发送查询来确定书架上书籍的排列顺序。然而,由于无论书籍顺序是正序还是倒序,机器返回的答案都相同,她无需指定书籍是从左到右还是从右到左排列。
由于机器年代久远,她最多只能向机器发送 20000 次查询。
任务
编写一个程序,通过向机器发送最多 20000 次查询,确定书架上书籍的排列顺序。无需指定书籍是从左到右还是从右到左排列。
实现细节
你需要实现以下函数。程序应包含函数定义 int Query(const std::vector<int>& M); 和 void Answer(const std::vector<int>& res);。程序不应当引入外部头文件。请使用不低于 C++17 的语言版本提交代码。
-
void Solve(int N)
对于每个测试用例,该函数将被调用一次。
你的程序可以调用以下函数。
当函数 Solve 结束时,若调用函数 Answer 的次数不等于 1,你的程序将被视为 Wrong Answer [7]。
若函数 Solve 所指定的书籍顺序与书架上实际的书籍顺序不同,你的程序将被视为 Wrong Answer [8]。无需指定书籍是从左到右还是从右到左排列。
重要提示
- 你的程序可以为内部使用实现其他函数,或使用全局变量。
- 你的程序不应使用标准输入和标准输出。你的程序不应以任何方式与其他文件通信。但你的程序可以向标准错误输出调试信息。