QOJ.ac

QOJ

حد الوقت: 1.0 s حد الذاكرة: 1024 MB مجموع النقاط: 100

#17990. 图书排序

الإحصائيات

Beatriz 总是很喜欢阅读,所以她决定开一家书店,这样她整天都能有书相伴。她希望确保书架上的书摆放得井井有条,以便吸引更多的顾客。

在书店的一个大书架上,有一排共 $N$ 堆书,从左到右依次编号为 $1$ 到 $N$。第 $i$ 堆书包含 $A_i$ 本书。Beatriz 希望书的数量呈非降序排列,即对于 $i = 1, 2, \dots, N - 1$,满足 $A_i \le A_{i+1}$。这可能需要对书籍进行一些重新排列。

然而,Beatriz 很懒,她实在不想自己整理这些书。于是她向她最好的朋友 Bernardo 寻求帮助。他们约定,Beatriz 将给 Bernardo 发送一系列指令。在每条指令中,Beatriz 会指定两堆不同的书 $i$ 和 $j$,然后 Bernardo 会将这两堆书中总共 $s = A_i + A_j$ 本书取出来,并尽可能均匀地重新分配到这两堆中。这意味着在执行该指令后,这两堆书的数量将按以下方式更新:

$$A_i = \left\lfloor \frac{s}{2} \right\rfloor, \quad A_j = \left\lceil \frac{s}{2} \right\rceil$$

Beatriz 不想让 Bernardo 花费太多时间帮她搬书。她希望通过一个包含最多 $10^5$ 条指令的序列来达到所需的非降序排列。但是,Beatriz 也不想自己去想这些指令。你能帮她设计一个有效的指令序列吗?

输入格式

第一行包含一个整数 $N$($2 \le N \le 5000$),表示书架上书堆的数量。每堆书由 $1$ 到 $N$ 之间的一个唯一整数标识。

第二行包含 $N$ 个整数 $A_1, A_2, \dots, A_N$($1 \le A_i \le 10^5$),其中 $A_i$ 是第 $i$ 堆书的初始数量。

输出格式

第一行必须包含一个整数 $k$($0 \le k \le 10^5$),表示要执行的指令数量。

接下来的 $k$ 行中,每行必须包含两个整数 $i$ 和 $j$($1 \le i, j \le N$ 且 $i \neq j$),描述一条指令,表示对第 $i$ 堆和第 $j$ 堆书进行如上所述的重新分配。在按照输出中出现的顺序执行完所有指令后,书架上的书堆必须按非降序排列。

可以证明,在给定的约束条件下,一定存在有效的解。如果存在多个解,输出其中任意一个即可;不需要使 $k$ 最小。

样例

输入样例 1

3
1 1 1

输出样例 1

0

说明 1

由于书架初始时就已经按非降序排列,因此一个空的指令序列也是一个有效的输出。

输入样例 2

3
1 1 1

输出样例 2

3
1 2
1 2
2 3

说明 2

虽然书架初始时已经排好序,但该输出仍然是有效的,因为在执行了最多 $10^5$ 条指令后,书架最终仍保持有序。不需要使指令数量最小化。

输入样例 3

5
14 7 13 8 15

输出样例 3

3
2 1
1 4
3 4

说明 3

第一条指令($i = 2, j = 1$)将书架状态从 $[14, 7, 13, 8, 15]$ 变为 $[11, 10, 13, 8, 15]$。

第二条指令($i = 1, j = 4$)将书架状态从 $[11, 10, 13, 8, 15]$ 变为 $[9, 10, 13, 10, 15]$。

第三条指令($i = 3, j = 4$)将书架状态从 $[9, 10, 13, 10, 15]$ 变为 $[9, 10, 11, 12, 15]$,此时书架已按非降序排列。

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.