E. 宋祖清册策

    传统题 1000ms 256MiB

宋祖清册策

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

宋祖清册策

题目背景

显德年间,后周世宗柴荣亲征南唐,遣殿前都虞候赵匡胤自领兵马,鏖战江淮,克清流关,复取滁州城。

城破之后,赵匡胤为抚安百姓,急命清点户籍,登册造籍,以定徭役兵赋。时值战乱新平,百姓流离失所,民籍荒废,城中居民杂处,未有秩序。

官吏仓促立册,录入各户,唯因形势匆忙,登记无序,名册上居民顺序错乱无章,不能循序。

赵匡胤素重治安,以法制民。为整肃城中百姓,复定纲纪,赵匡胤下令:

  • 清册之中,每户应有一编号,编户齐备,编号为 11NN,一一对应,绝无重号;
  • 册中居民当依编号自小至大依次排列,次第井然,以示法治;
  • 每次整顿操作,吏卒可点名两户,互换二者在清册之中之列位;
  • 各户不得擅动位置,亦不得自行更易,唯官吏指令,方可移列;
  • 更易操作无数量限制。
  • 整顿完成,需如实录明整顿步骤,记下每次交换所涉及的两户列位编号;
  • 整顿后,需确保清册顺序为1,2,3,,N(1,2,3,\ldots,N),一一对应,编号无误。

然则清册初立错杂无章,官吏徒有法令,不知如何整顿而从速。赵匡胤念军政之急,召能吏参议,求最佳整序之策,令不误国事,不扰民生。

任务说明

你需参赞赵匡胤,定一策令,使得最终清册之居民编号,依次为 1,2,,N(1, 2, \ldots, N),无一错位。

你应具录整顿步骤,列出所需操作次数及每次操作所交换的两户位置。

输入输出格式

输入格式

输入一共两行:

第一行一整数 NN,表示城中居民户数;

第二行 NN 个正整数,表示初始登记的居民编号顺序。

保证编号各不相同,且为 11NN 之间整数,清册初立,顺序错杂,需整顿。

输出格式

第一行输出整顿操作的总次数 K

接下来 K 行,每一行,输出一对整数 <i,j><i, j>,表示将清册中第 ii 户与第 jj 户居民的列位交换。

整顿完成后,清册中居民编号应严格依次为 (1,2,,N)(1, 2, \ldots, N)

题目样例

样例#01

5
3 4 1 2 5
2
1 3
2 4

样例说明 操作改变序列如下

  • 最初为 A=(3,4,1,2,5)A=(3,4,1,2,5)
  • 第一次操作将第一和第三个元素对调,得到 A=(1,4,3,2,5)A=(1,4,3,2,5)
  • 第二次操作将第二和第四元素对调,得到 A=(1,2,3,4,5)A=(1,2,3,4,5)

** 其他输出结果,例如以下结果,也被认为是正确的:**

4
2 3
3 4
1 2
2 3

样例#02

4
1 2 3 4
0

样例#03

3
3 1 2
2
1 2
2 3

数据范围

  • 2N2×1052 \leq N \leq 2 \times 10^5
  • 输入的居民编号为 11NN 的一个排列,且互不相同。

「果壳语法杯」ROUND #6 (Div.5)

未参加
状态
已结束
规则
IOI
题目
5
开始于
2025-6-6 18:00
结束于
2025-6-8 19:00
持续时间
2 小时
主持人
参赛人数
30