#P12176. [蓝桥杯 2025 省 Python B] 书架还原

    ID: 12101 远端评测题 5000ms 512MiB 尝试: 0 已通过: 0 难度: 3 上传者: 标签>贪心2025图论建模蓝桥杯省赛

[蓝桥杯 2025 省 Python B] 书架还原

Description

在一个偏远的图书馆里,有个书架上放着 nn 本书,每本书上都标有一个从 11nn 的唯一编号。

按照规矩,这些书应该按编号从小到大依次排列:11 号书位于最左端,22 号书紧随其后,以此类推,直到 nn 号书在最右端。这样的顺序不仅看起来整齐,也方便读者快速找到想借的书。

可昨天店里人来人往,借书还书忙得不可开交,书架上的顺序出现了错乱。现在,书架上的书变成了 a=(a1,a2,,an)a = (a_1, a_2, \ldots, a_n),其中 aia_i 表示第 ii 个位置上的书编号。

管理员决定动手整理书架,但时间有限,他希望用最少的操作把书的顺序恢复到正确的排列。每次操作,他可以挑选书架上任意两本书,交换它们的位置。例如,如果当前排列是 (3,1,2)(3, 1, 2),他可以交换第 11 本和第 22 本,得到 (1,3,2)(1, 3, 2),再交换第 22 本和第 33 本,得到 (1,2,3)(1, 2, 3)

你的任务是帮助管理员计算,最少需要进行多少次操作,才能让书架上的书的编号排列变为 (1,2,,n)(1, 2, \ldots, n)

Input Format

输入的第一行包含一个正整数 nn,表示书架上书的总数。

第二行包含 nn 个正整数 a1,a2,,ana_1, a_2, \ldots, a_n,相邻整数之间使用一个空格分隔,依次表示当前书架上每本书的编号。a1,a2,,ana_1, a_2, \ldots, a_n 是一个 11nn 的排列。

Output Format

输出一行包含一个整数表示答案,即将书架上的书恢复到正确排列所需的最少操作次数。

3
3 1 2
2

Hint

评测用例规模与约定

  • 对于 30%30\% 的评测用例,1n1031 \leq n \leq 10^31ain1 \leq a_i \leq na1,a2,,ana_1, a_2, \dots, a_n 各不相同;
  • 对于所有评测用例,1n1061 \leq n \leq 10^61ain1 \leq a_i \leq na1,a2,,ana_1, a_2, \dots, a_n 各不相同。