您的位置:首页
1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
2017-06-24 18:14
429 查看
题目信息
1067. Sort with Swap(0,*) (25)时间限制150 ms
内存限制65536 kB
代码长度限制16000 B
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 (<=10^5) 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
解题思路
首位为0,找出第一个未排序的数的位置进行交换首位非0。与该数应处的位置交换
AC代码
#include <cstdio> #include <vector> #include <algorithm> using namespace std; vector<int> a, b; int main() { int n, t, c = 0; scanf("%d", &n); for (int i = 0; i < n; ++i){ scanf("%d", &t); a.push_back(t); } int cnt = 0; while (c < n){ //序列排序未结束 if (0 == a[0]){ //首位为0,找出第一个未排序的数的位置 for (; c < n && c == a[c]; ++c) continue; if (c >= n) break; swap(a[0], a[c]); ++cnt; }else{ //首位非0。与应处于的位置交换 swap(a[0], a[a[0]]); ++cnt; } } printf("%d\n", cnt); return 0; }
个人游戏推广:
《10云方》与方块来次消除大战!
相关文章推荐
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- PAT (Advanced Level) Practise 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 (Advanced Level) 1067. Sort with Swap(0,*) (25) 只能与0交换
- PAT - 甲级 - 1067. Sort with Swap(0,*) (25)(模拟+贪心)
- PAT-A 1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25)(交换同一个数字给数列排序)
- PAT 甲级 1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) Practise 1098 Insertion or Heap Sort (25)
- 【PAT】1067. Sort with Swap(0,*) (25)
- PAT-A-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 1067 Sort with Swap(0,*) (25)
- PAT (Advanced Level) Practise 1098 Insertion or Heap Sort (25)
- PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题