#P10642. [BalticOI 2022 Day1] Art Collection

[BalticOI 2022 Day1] Art Collection

题目描述

有一个值域 [1,n][1,n] 的未知排列 PP。你每次可以询问一个排列 RR。交互库会返回满足在排列 PPii 出现在 jj 前面,在排列 RRii 出现在 jj 后面的有序对 (i,j)(i,j) 的数量。你需要猜出排列 PP

实现细节

你无需在程序开头引用头文件 art.h,你只需要在代码开头加入以下代码。

#include <vector>
void answer(std::vector<int>);
int publish(std::vector<int>);

你需要实现一个函数 void solve(int N),这个函数可以调用如下函数:

  • int publish(std::vector<int> R)
    • 该函数可以向交互库询问排列 RRRR 应当是一个值域 [1,n][1,n] 的排列。
    • 该函数至多能被调用 40004000 次。
  • void answer(std::vector<int> R)
    • 该函数向交互库提交答案,表示你猜测的排列。
    • 你必须恰好调用该函数一次。

输入格式

样例交互库从标准输入流读入以下数据:

第一行,一个整数 nn

第二行,nn 个整数,第 ii 个数表示 PiP_i

如果输入不符格式,则直接判为 Invalid input!

输出格式

样例交互库向标准输入流输出以下数据:

在你每一次调用 public 函数后,交互库都会输出一行,表示你的交互内容。

在你调用 answer 函数,交互库会输出两行。

第一行,nn 个整数,表示你回答的排列。

第二行会输出交互库的判决。若回答正确会返回 Correct: x published ranking(s).,其中 xx 是你的交互次数。否则返回 Wrong answer!

提示

样例交互

考虑排列 PP{1,3,2}\{1,3,2\}

样例中进行的交互如下:

调用 返回值 解释
publish({1, 2, 3}) 1 合法有序对为 (3,2)(3,2)
publish({2, 3, 1}) 3 合法有序对为 (1,3),(1,2),(3,2)(1,3),(1,2),(3,2)
answer({1, 3, 2}) 回答与正确答案相符

数据范围与提示

  • 子任务 11 (55 分):N6N \leq 6
  • 子任务 22 (1515 分):N40N \leq 40
  • 子任务 33 (1515 分):N250N \leq 250
  • 子任务 44 (1515 分):N444N \leq 444
  • 子任务 55 (2020 分):N2000N \leq 2000
  • 子任务 66 (3030 分):没有特殊限制

对于所有数据,满足 2N40002\leq N \leq 4000