#P11884. [RMI 2024] 拉面 / Ramen
[RMI 2024] 拉面 / Ramen
题目背景
在洛谷上评测时,将如下内容粘贴至文件头:
std::vector<int> find_order(int N);
std::vector<std::pair<int, int>> query(const std::vector<int>& order);
我们在附件中提供了模板文件,你可以在该文件的基础上开始编辑。
题目描述
这是一道函数式交互题。
有 人,编号 。有 种拉面,编号 。
第 个人对第 种拉面的喜爱度为整数 。 越大,她对拉面 越喜欢。保证 ,都有 。 注意 可以 。
由于拉面存量不够,每种拉面仅供一人享用。设想这 个人以 (显然 是一个排列)的顺序点餐,首先第 个人会点她最喜欢的拉面,然后 会选择没被 点过的拉面中,她最喜欢的拉面,以此类推。
换句话说,第 个人会选择第 个人没点过的拉面中,她最喜欢的拉面。
对于排列 ,设 为第 个人点的拉面,定义排列 的愉悦度为 。
你可以进行至多 次询问:每次询问给定排列 ,交互库会返回 个二元组,第 个二元组为 。目标是找到一个排列 ,最大化其愉悦度。
实现细节
你不需要,也不应该实现 main
函数。
你需要实现以下的函数:
std::vector<int> find_order(int n);
- 参数 :人数和拉面种类数。
- 返回一个排列 。
你可以调用以下的函数:
std::vector<std::pair<int, int>> query(const std::vector<int>& order);
- 参数 :一个排列 。
- 返回 个二元组,第 个二元组为 ,表示在给定排列下,第 个人会吃第 种拉面,以及她对第 种拉面的喜爱度。
在洛谷上评测时,将如下内容粘贴至文件头:
std::vector<int> find_order(int N);
std::vector<std::pair<int, int>> query(const std::vector<int>& order);
输入格式
见【实现细节】。
输出格式
见【实现细节】。
提示
样例交互
交互库 | 选手程序 |
---|---|
调用 find_order(2) |
|
query({0,1}) |
|
{{0, 9}, {1, 0}} |
|
query({1, 0}) |
|
{{1, 5}, {0, 5}} |
|
返回 {1,0} |
在该样例中,,。显然 可以达成最大的愉悦度 。
数据范围
对于 的数据,保证:
- ;
- 。
std 至多会询问 次,其中 是某个不小于 的常数。
子任务 | 得分 | |
---|---|---|