现在的位置: 首页 > 综合 > 正文

Codeforces-347B

2013年04月13日 ⁄ 综合 ⁄ 共 453字 ⁄ 字号 评论关闭

题意:在n个数中,只可能的数是再(0~n-1)的数,如果有些数所在的位置(0~n-1)刚好等于它的值,就是好点。问:你只能交换一对,交换后好点最多的个数。

没什么算法

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std ;
int f[100005];
int main()
{
	int n,ans,num;
	bool flag;
    while(scanf("%d",&n)!=EOF){
		memset(f,-1,sizeof(f));
		ans=0;
		flag=0;
		for(int i=0;i<n;i++){
			scanf("%d",&num);
			f[i]=num;
			if(num==i) ans++;
	        else{
				if(i==f[num]) flag=1;			
	        } 
		}
		if(ans==n){
			printf("%d\n",ans);
			continue;
		} 
		if(flag) printf("%d\n",ans+2);
		else printf("%d\n",ans+1);
    }
 	return 0 ;
}

抱歉!评论已关闭.