传统题 1000ms 256MiB

Life Will Change

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

给定一个长度为 nn 的排列 p1,p2,p3,,pnp_1, p_2, p_3, \dots, p_n,一次操作可以交换排列中的两个元素 pip_ipjp_j,其中 1i,jn1 \leq i , j \leq n

你的任务是在不超过 n1n-1 次操作内,将排列变成升序排列 1,2,3,,n1, 2, 3, \dots, n。你需要输出一种操作方案。

输入格式

第一行包含一个整数 nn,表示排列的长度 (2n1062 \leq n \leq 10^6)。

第二行包含 nn 个整数 p1,p2,p3,,pnp_1, p_2, p_3, \dots, p_n,表示给定的排列。保证每个整数 1n1 \sim n 出现且只出现一次。

输出格式

第一行输出一个整数 kk,表示方案所需的操作次数。

接下来的 kk 行,每行包含两个整数 xxyy,表示交换 pxp_xpyp_y 的操作 (1x,yn1 \leq x , y \leq n)。

样例 #1

样例输入 #1

5
3 4 1 5 2

样例输出 #1

3
1 3
2 4
5 2

提示

对于所有输入,2n1062 \leq n \leq 10^6。输出可以有多种方案,只需要输出任意一种满足条件的方案即可。

为处理大量输入输出,可以在 C++ 中使用更快的 I/O 方式。

在 C++ 中,可以在 main 函数的开头添加以下代码:

ios::sync_with_stdio(false);
cin.tie(nullptr);

这将通过关闭 C++ 和 C 标准输入输出流的同步,并使 cincout 解绑,使 cin 独立运行,从而加快输入输出的速度。

2024 NUAAXCPC Freshman Contest

未参加
状态
已结束
规则
XCPC
题目
13
开始于
2024-11-23 13:00
结束于
2024-11-23 17:00
持续时间
4 小时
主持人
参赛人数
123