1441: 固定点
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:5
解决:5
题目描述
在数学中有这样一种定义,如果在一个长度为n的整数数列中,0到n-1分别都出现且仅出现一次,我们把这种序列叫做置换序列。
例如:序列[0,2,1]是一个长度为3的置换序列,而这两个[0,2,2]和[1,2,3]不是置换序列。
在一个置换序列中,如果一个整数 ai的和它所在的位置i存在这样的关系 ai = i,那么这个整数就是该置换序列的固定点,一个长度为n的置换序列最多可以有n个固定点。
例如,置换序列[0,2,1]有1个固定点和置换序列[0,1,2],有3个固定点。
现在有一个置换序列,你的任务是最大限度地提高固定点的数目,但你只能选两个元素进行一次交换位置的操作。
例如,置换序列[0,2,1],你可以交换2和1,这是你的固定点就有3个了。
请你用编程的方式完成这个任务,并且把交换后的置换序列的固定点个数输出来。
输入(fixedpoints.in)
第一行包含一个整数n(1≤ n ≤10^5)。
第二行包含n整数由0, 1,..., n-1 组成长度为n的给定排列。
输出(fixedpoints.out)
一个整数:最多一个交换操作可能的最大数量的固定点。
样例:
输入
5
0 1 3 4 2 输出 A[a[i]]=i 3 数据范围 10%的数据:n<=10 30%的数据:n<=300 60%的数据:n<=5000 100%的数据:n<=100000
0 1 3 4 2 输出 A[a[i]]=i 3 数据范围 10%的数据:n<=10 30%的数据:n<=300 60%的数据:n<=5000 100%的数据:n<=100000
样例输入 复制
5
0 1 3 4 2
样例输出 复制
3