时间限制
150 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
Given any permutation of the numbers {0, 1, 2,..., N-1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the following way:
Swap(0, 1) => {4, 1, 2, 0, 3}
Swap(0, 3) => {4, 1, 2, 3, 0}
Swap(0, 4) => {0, 1, 2, 3, 4}
Now you are asked to find the minimum number of swaps need to sort the given permutation of the first N nonnegative integers.
Input Specification:
Each input file contains one test case, which gives a positive N (<=105) followed by a permutation sequence of {0, 1, ..., N-1}. All the numbers in a line are separated by a space.
Output Specification:
For each case, simply print in a line the minimum number of swaps need to sort the given permutation.
Sample Input:
10 3 5 7 2 6 4 9 0 8 1
Sample Output:
9
1 #include <stdio.h> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int n; 7 int loc[100000]; 8 while(scanf("%d",&n)!=EOF) 9 { 10 11 12 int tem,i,left; 13 left = n-1; 14 for(i=0;i<n;i++) 15 { 16 scanf("%d",&tem); 17 loc[tem] = i; 18 if(tem == i && i!=0) 19 --left; 20 } 21 22 int count = 0; 23 int k = 1; 24 while(left > 0) 25 { 26 if(loc[0]==0) 27 { 28 while(k < n) 29 { 30 if( loc[k] != k ) 31 { 32 swap(loc[0],loc[k]); 33 ++count; 34 break; 35 } 36 ++k; 37 } 38 } 39 40 41 while(loc[0]!=0) 42 { 43 swap(loc[0],loc[loc[0]]); 44 ++count; 45 --left; 46 } 47 48 } 49 50 printf("%d\n",count); 51 } 52 return 0; 53 }