1441: 固定点

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:5 解决:5

题目描述

在数学中有这样一种定义,如果在一个长度为n的整数数列中,0n-1分别都出现且仅出现一次,我们把这种序列叫做置换序列 例如:序列[021]是一个长度为3的置换序列,而这两个[022][123]不是置换序列。 在一个置换序列中,如果一个整数 ai的和它所在的位置i存在这样的关系 ai=i,那么这个整数就是该置换序列的固定点,一个长度为n的置换序列最多可以有n个固定点。 例如,置换序列[021]1个固定点和置换序列[012],有3个固定点。 现在有一个置换序列,你的任务是最大限度地提高固定点的数目,但你只能选两个元素进行一次交换位置的操作。 例如,置换序列[021],你可以交换21,这是你的固定点就有3个了。 请你用编程的方式完成这个任务,并且把交换后的置换序列的固定点个数输出来。 输入(fixedpoints.in) 第一行包含一个整数n1≤  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

样例输入 复制

5  
0 1 3 4 2

样例输出 复制

3

来源/分类