PAT 1067 Sort with Swap(0, i)(25 分)(用指定方法排序)
2018-08-31 11:07
316 查看
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:
[code]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:
[code]10 3 5 7 2 6 4 9 0 8 1
Sample Output:
[code]9
题解:用题目给的指定方法排序,只用0与其它位交换,问最小的交换次数。定义一个变量left记录当前数字没有归位的数量。使交换次数最小的办法是让0与本来应该在它当前所在位的数字交换,若0在其本位,则往右寻找第一个不是在本位的数字交换。可以直接使用#include<algorithm>头文件下的swap()函数。
代码:
[code]#include<bits/stdc++.h> using namespace std; const int maxn=100005; int pos[maxn]; int main() { int n,num; int ans=0; cin>>n; int left=n-1; //除0以外未归位的个数 for(int i=0;i<n;i++) { cin>>num; pos[num]=i; if(num==i&&num!=0) left--; //未归位的数字个数 } int k=1; //除0以外当前不在本位最小的数 while(left>0) { if(pos[0]==0) //如果0在本位 { while(k<n) { if(pos[k]!=k) { swap(pos[0],pos[k]); ans++; break; } k++; } } while(pos[0]!=0) { swap(pos[0],pos[pos[0]]); ans++; left--; } } cout<<ans<<endl; return 0; }
阅读更多
相关文章推荐
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题
- PAT 1067. Sort with Swap(0,*) (25)(交换同一个数字给数列排序)
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- 浙大pat | 牛客网甲级 1025 Sort with Swap(0) (25)排序
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- PAT - 甲级 - 1067. Sort with Swap(0,*) (25)(模拟+贪心)
- 【PAT甲级】1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) 1067. Sort with Swap(0,*) (25) 只能与0交换
- 1067. Sort with Swap(0,*) (25) PAT甲级
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- PAT 甲级 1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) 1067. Sort with Swap(0,*) (25)
- 【PAT】【Advanced Level】1067. Sort with Swap(0,*) (25)
- 【PAT】1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25) 思路简单,优化麻烦
- pat 1067. Sort with Swap(0,*) (25)
- PAT 数据结构 08-排序5. Sort with Swap(0,*) (25)
- pat 1067 Sort with Swap(0,*) (25)
- PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法
- PAT 1067. Sort with Swap(0,*) (25)