Codeforces 201(DIV2)B
思路:a[i] = k,且a[k] = i,即i==a[a[i]](k与i不相等)则可增加2,否则若sum!=n,则必增加1.
#include<stdio.h> #include<math.h> int a[100001]; int main() { int n,i,sum,flag,flag1,p; while(~scanf("%d",&n)) { p = flag = flag1 = sum = 0; for(i = 0;i < n;i ++) { scanf("%d",&a[i]); if(i==a[i]) sum++; } if(sum!=n) flag1 = 1; for(i = 0;i < n;i ++) { if(a[a[i]]==i&&a[i]!=i) { flag = 1; break ; } } if(!(flag+flag1)) printf("%d\n",sum); if(flag==1) { printf("%d\n",sum+2); continue ; } if(flag==0&&flag1==1) printf("%d\n",sum+1); }