fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int arr[100005],temp;
  4.  
  5. inline void swap(int *a,int *b)
  6. {
  7. temp=*a;
  8. *a=*b;
  9. *b=temp;
  10. }
  11.  
  12. int main()
  13. {
  14. int t,n,i,count=0;
  15. bool flag;
  16. scanf("%d",&t);
  17. while(t--)
  18. {
  19. scanf("%d",&n);
  20. for(i=1;i<=n;i++) scanf("%d",&arr[i]);
  21.  
  22.  
  23. flag=0;
  24. count=0;
  25. i=1;
  26. while(i<=n)
  27. {
  28. if(i==arr[i]) { /* do nothing */ }
  29. else if(i==arr[arr[i]])
  30. {
  31. count++;
  32. swap(&arr[i],&arr[arr[i]]);
  33. }
  34. else if( arr[arr[arr[i]]]==i )
  35. {
  36. count+=2;
  37. swap(&arr[i],&arr[arr[i]]);
  38. swap(&arr[i],&arr[arr[i]]);
  39. }
  40. else
  41. {
  42. flag=1;
  43. printf("Too chaotic\n");
  44. break;
  45. }
  46.  
  47.  
  48. i++;
  49.  
  50. }
  51.  
  52. if(flag==0) printf("%d\n",count);
  53.  
  54. }
  55.  
  56. }
Success #stdin #stdout 0s 3852KB
stdin
2
5
2 1 5 3 4
5
2 5 1 3 4
stdout
3
Too chaotic