标签:space put iostream lan vector 位置 就是 which author
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 Nnonnegative integers.
Each input file contains one test case, which gives a positive N (≤10?5??) followed by a permutation sequence of {0, 1, ..., N−1}. All the numbers in a line are separated by a space.
For each case, simply print in a line the minimum number of swaps need to sort the given permutation.
10
3 5 7 2 6 4 9 0 8 1
9
题意:输入一个序列,如果某个数不在该位置,比如1不在1号位,那么需要和0交换,直到整个序列都在数所对应的位置上,过程中只能用0交换,求最小交换次数
分析:贪心题,要次数最小,只要每次和0交换后到达所对应的位置,简单地说就是换一次就不用再换了。
这里要考虑两种情况,第一种是0不在0号位,那么找到0在的位置,比如在3号位,那么和三号位对应的数交换;
第二种是0在0号位,找到第一个不在本位上的数交换。
为了方便起见,数组用来存数的位置。如下所示:
t | 4 | 1 | 2 | 0 | 3 |
a[] | 3 | 1 | 2 | 4 | 0 |
1 /**
2 * Copyright(c)
3 * All rights reserved.
4 * Author : Mered1th
5 * Date : 2019-02-26-10.19.41
6 * Description : A1067
7 */
8 #include<cstdio>
9 #include<cstring>
10 #include<iostream>
11 #include<cmath>
12 #include<algorithm>
13 #include<string>
14 #include<unordered_set>
15 #include<map>
16 #include<vector>
17 #include<set>
18 using namespace std;
19 const int maxn=100010;
20 int main(){
21 #ifdef ONLINE_JUDGE
22 #else
23 freopen("1.txt", "r", stdin);
24 #endif
25 int n,t,a[maxn]={0},num=0;
26 scanf("%d",&n);
27 int left=n-1;
28 for(int i=0;i<n;i++){
29 scanf("%d",&t);
30 a[t]=i;
31 if(t==i && t!=0) left--;
32 }
33 int j=1;
34 while(left){
35 int i;
36 if(a[0]==0){
37 for(;j<n;j++){
38 if(a[j]!=j){
39 swap(a[j],a[0]);
40 num++;
41 break;
42 }
43 }
44 }
45 else{
46 swap(a[0],a[a[0]]);
47 num++;
48 left--;
49 }
50
51 }
52 cout<<num;
53
54 return 0;
55 }
1067 Sort with Swap(0, i) (25 分)
标签:space put iostream lan vector 位置 就是 which author
原文地址:https://www.cnblogs.com/Mered1th/p/10436236.html