QOJ.ac

QOJ

時間限制: 3 s 記憶體限制: 512 MB 總分: 100

#5568. 循环移位

统计

给定一个 $1$ 到 $n$ 的排列 $p$。

在一次操作中,我们可以选择 $k > 0$ 个下标 $1 \le x_1 < x_2 < \dots < x_k \le n$,并将排列中对应这些下标的元素向右循环移位: $$p_{x_2} := p_{x_1}, p_{x_3} := p_{x_2}, p_{x_4} := p_{x_3}, \dots, p_{x_k} := p_{x_{k-1}}, p_{x_1} := p_{x_k}$$

对于给定的 $k$,执行此操作的代价为 $\frac{1}{k}$ 美元。 你的目标是使用最多 $2$ 美元的代价将给定的数组排序。

  • 对于评测系统,精确的代价计算方式为 $10^{-8} \lceil \frac{10^8}{k} \rceil$。

输入格式

第一行包含一个整数 $n$ ($1 \le n \le 5 \cdot 10^3$)。 第二行包含 $n$ 个整数 $p_1, p_2, \dots, p_n$ ($1 \le p_i \le n$),表示待排序的排列。保证 $p_i$ 构成一个排列。

输出格式

第一行输出一个整数 $m$,表示你使用的操作次数。 接下来输出 $m$ 行。 第 $i+1$ 行包含一个长度为 $n$ 的二进制字符串 $s_i$。如果 $s_i$ 的第 $j$ 个字符为 $1$,则表示 $j$ 是第 $i$ 次循环移位操作涉及的下标(如果第 $j$ 个字符为 $0$,则表示不涉及)。 这 $m$ 行中的每一行必须至少包含一个字符 '1'。

样例

样例输入 1

3
2 1 3

样例输出 1

4
011
110
111
011

样例输入 2

4
1 2 3 4

样例输出 2

0

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.