#P11884. [RMI 2024] 拉面 / Ramen

    ID: 13319 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>2024交互题Special JudgeRMI(罗马尼亚)

[RMI 2024] 拉面 / Ramen

背景

在洛谷上评测时,将如下内容粘贴至文件头:

std::vector<int> find_order(int N);

std::vector<std::pair<int, int>> query(const std::vector<int>& order);

我们在附件中提供了模板文件,你可以在该文件的基础上开始编辑。

题目描述

这是一道函数式交互题。

有 nn 人,编号 0∼n−10\sim n-1。有 nn 种拉面,编号 0∼n−10\sim n-1。

第 ii 个人对第 jj 种拉面的喜爱度为整数 Ai,jA_{i,j}。Ai,jA_{i,j} 越大,她对拉面 jj 越喜欢。保证 ∀0≤p<q≤n−1\forall 0\le p\lt q\le n-1,都有 Ai,p≠Ai,qA_{i,p}\neq A_{i,q}。 注意 Ai,jA_{i,j} 可以 <0\lt 0。

由于拉面存量不够,每种拉面仅供一人享用。设想这 nn 个人以 π0,π1,…,πn−1\pi_0,\pi_1,\ldots,\pi_{n-1}(显然 π\pi 是一个排列)的顺序点餐,首先第 π0\pi_0 个人会点她最喜欢的拉面,然后 π1\pi_1 会选择没被 π0\pi_0 点过的拉面中,她最喜欢的拉面,以此类推。

换句话说,第 πi\pi_i 个人会选择第 π0,π1,…,πi−1\pi_0,\pi_1,\ldots,\pi_{i-1} 个人没点过的拉面中,她最喜欢的拉面。

对于排列 π\pi,设 σ(i)\sigma(i) 为第 ii 个人点的拉面,定义排列 π\pi 的愉悦度为 ∑0≤i<nAi,σ(i)\displaystyle \sum_{0\le i\lt n} A_{i,\sigma(i)}。

你可以进行至多 750750 次询问:每次询问给定排列 π\pi,交互库会返回 nn 个二元组,第 ii 个二元组为 (σ(i),Ai,σ(i))(\sigma(i),A_{i,\sigma(i)})。目标是找到一个排列 π\pi,最大化其愉悦度。

实现细节

你不需要,也不应该实现 main 函数。

你需要实现以下的函数:

std::vector<int> find_order(int n);
  • 参数 nn:人数和拉面种类数。
  • 返回一个排列 π0,π1,…,πn−1\pi_0,\pi_1,\ldots,\pi_{n-1}。

你可以调用以下的函数:

std::vector<std::pair<int, int>> query(const std::vector<int>& order);
  • 参数 order\mathrm{order}:一个排列 π0,π1,…,πn−1\pi_0,\pi_1,\ldots,\pi_{n-1}。
  • 返回 nn 个二元组,第 ii 个二元组为 (σ(i),Ai,σ(i))(\sigma(i),A_{i,\sigma(i)}),表示在给定排列下,第 ii 个人会吃第 σ(i)\sigma(i) 种拉面,以及她对第 σ(i)\sigma(i) 种拉面的喜爱度。

在洛谷上评测时,将如下内容粘贴至文件头:

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}

在该样例中,A0=[9,5]A_{0}=[9,5],A1=[5,0]A_1=[5,0]。显然 π=[1,0]\pi=[1,0] 可以达成最大的愉悦度 5+5=105+5=10。

数据范围

对于 100%100\% 的数据,保证:

  • 1≤n≤751\le n\le 75;
  • ∣Ai,j∣≤2×106|A_{i,j}|\le 2\times 10^6。

std 至多会询问 c⋅nkc\cdot n^k 次,其中 c,kc,k 是某个不小于 11 的常数。


子任务 n=n= 得分
11 55
22 1515
33 3030 2020
44 4545
55 6060
66 7575