cf B. Fixed Points
http://codeforces.com/contest/347/problem/B
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int n; 7 int a[100010]; 8 int id[100010]; 9 int main() 10 { 11 while(scanf("%d",&n)!=EOF) 12 { 13 int cnt=0; 14 for(int i=0; i<n; i++) 15 { 16 scanf("%d",&a[i]); 17 id[i]=a[i]; 18 if(a[i]==i) 19 { 20 id[i]=-1; 21 cnt++; 22 } 23 } 24 bool flag=false; 25 bool flag1=false; 26 for(int i=0; i<n; i++) 27 { 28 if(id[id[i]]==i&&id[i]!=-1) 29 { 30 flag=true; 31 cnt+=2; 32 break; 33 } 34 else if(id[i]!=i&&id[i]!=-1) 35 { 36 flag1=true; 37 } 38 } 39 if(!flag&&flag1) cnt+=1; 40 printf("%d\n",cnt); 41 } 42 return 0; 43 }