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 }
View Code

 

你可能感兴趣的:(fixed)