CF347B Fixed Points

题目描述

一个长度为 $n$ 的排列是一个整数序列,使得从 $0$ 到 $n-1$ 的每个整数恰好出现一次。例如,序列 $[0,2,1]$ 是长度为 $3$ 的排列,而 $[0,2,2]$ 和 $[1,2,3]$ 都不是。 函数的不动点是被该函数映射到自身的点。排列可以被视为一个双射函数。我们可以得到排列中的不动点定义:当且仅当 $a_i = i$ 时,整数 $i$ 是排列 $a_0, a_1, \ldots, a_{n-1}$ 的一个不动点。例如,排列 $[0,2,1]$ 有 $1$ 个不动点,排列 $[0,1,2]$ 有 $3$ 个不动点。 现在给定一个排列 $a$。你最多允许交换排列中的两个元素一次。你的任务是使结果排列中的不动点个数尽可能多。注意,你最多只能进行一次交换操作。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 10^5$)。 第二行包含 $n$ 个整数 $a_0, a_1, ..., a_{n-1}$,表示给定的排列。

输出格式

输出一个整数,表示在最多进行一次交换操作后,排列中可能获得的不动点的最大数量。

说明/提示

由 ChatGPT 5 翻译