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 1Sample Output:9#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#include <map>#include <string>#define Max 100010using namespace std;int main(){ int n,S[Max]; scanf("%d",&n); int f=n-1; int m=0,l; for(int i=0;i<n;i++) { scanf("%d",&S[i]); if(S[i]==i) f--; } while(f>0) { if(S[0]==0) //0在本位 { int k=1; while(k<n) { if(S[k]!=k) { swap(S[0],S[k]); m++; break; } k++; } } else if(S[0]!=0) { swap(S[0],S[S[0]]); m++; f--; } } printf("%d/n",m); system("pause"); return 0;}
新闻热点
疑难解答