#509. 混乱邪恶的猜排列

混乱邪恶的猜排列

题目描述

这是一道交互题。

你要通过一些询问猜一个排列 pp

询问的格式是给定一个下标组成的数列 x0,x1,,xm1x _ 0, x _ 1, \cdots, x _ {m - 1}(设其长为 mm),交互库会返回其中有多少个 ii1i<m1 \le i < m)满足 pxi1>pxip _ {x _ {i - 1}} > p _ {x _ {i}}

交互格式

你需要包含头文件 grader.h

你需要实现一个函数 std::vector<int> guess(int n);,其中 nn 表示要猜的排列长度。你需要返回这个排列,从 00 开始标号。

你可以调用函数 int ask(std::vector<int> x);,其中 xx 是询问的数列。该函数将返回其中有多少个 ii1i<m1 \le i < m)满足 pxi1>pxip _ {x _ {i - 1}} > p _ {x _ {i}}

你需要保证 xx 的长度之和小于等于 10610 ^ 6

样例交互库输入格式

第一行一个正整数 nn

接下来 nn 个非负整数表示一个排列。

样例交互库输出格式

一行一个实数表示该测试点得分占该测试点总分的比重。

样例

样例输入 1

2
0 1

样例输出 1

1.000000

样例输入/输出 2

见下发文件 prem2.in/ans。该样例满足测试点 22 的限制。

样例输入/输出 3

见下发文件 prem3.in/ans。该样例满足测试点 3203\sim 20 的限制。

数据范围与提示

本题共 2020 个测试点,每个测试点满分 55 分。

测试点编号 特殊性质
11 n=2n = 2
22 n=10n = 10
3203 \sim 20 n=100n = 100

以下是测试点得分占比和 ask 函数调用次数的关系:

调用次数 kk 得分占比
k99k \le 99 11
k>800k > 800 00
100k800100 \le k \le 800 0.2+800k700×350.2 + \frac{800 - k}{700} \times \frac{3}{5}

保证交互库运行时间不超过 0.2s,空间不超过 5MiB。