1067. Sort with Swap(0,*) (25)

 

时间限制
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 }

 

你可能感兴趣的:(sort)