题目描述
一个长度为 n 的排列是一个整数序列,使得从 0 到 n−1 的每个整数恰好出现一次。例如,序列 [0,2,1] 是长度为 3 的排列,而 [0,2,2] 和 [1,2,3] 都不是。
函数的不动点是被该函数映射到自身的点。排列可以被视为一个双射函数。我们可以得到排列中的不动点定义:当且仅当 ai=i 时,整数 i 是排列 a0,a1,…,an−1 的一个不动点。例如,排列 [0,2,1] 有 1 个不动点,排列 [0,1,2] 有 3 个不动点。
现在给定一个排列 a。你最多允许交换排列中的两个元素一次。你的任务是使结果排列中的不动点个数尽可能多。注意,你最多只能进行一次交换操作。
输入格式
第一行包含一个整数 n(1≤n≤105)。
第二行包含 n 个整数 a0,a1,...,an−1,表示给定的排列。
输出格式
输出一个整数,表示在最多进行一次交换操作后,排列中可能获得的不动点的最大数量。
5
0 1 3 4 2
3
原题链接:https://codeforces.com/problemset/problem/347/B