PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
2017-07-14 15:33
399 查看
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
题意:给你n个数,分别为0~n-1,每次可以将0和其他数字进行交换,问最少要交换几次,使得n个数字最后的顺序为0~n-1
解题思路:若0不在0号位,则将应该在0所在位置的数移过来,直至0到0号位,然后判断所有数所在的位置是否正确,若有不正确的,则用0和它交换
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <cmath> #include <map> #include <set> #include <stack> #include <queue> #include <vector> #include <bitset> #include <functional> using namespace std; #define LL long long const int INF = 0x3f3f3f3f; int a[100009], n,x; int main() { while (~scanf("%d", &n)) { for (int i = 0; i < n; i++) scanf("%d", &x),a[x]=i; int ans = 0,k=0; while (1) { while (a[0] != 0) { ans++; x = a[0]; swap(a[x], a[0]); } int flag = 1; for (int i = k; i < n; i++) { if (i != a[i]) { flag = 0; ans++; swap(a[i], a[0]); k = i;break; } } if (flag) { printf("%d\n", ans); break; } } } return 0; }
相关文章推荐
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- 【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 (Advanced Level) Practise 1098 Insertion or Heap Sort (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 - 甲级 - 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)
- PAT 1067. Sort with Swap(0,*) (25)(交换同一个数字给数列排序)
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题
- PAT (Advanced Level) Practise 1098 Insertion or Heap Sort (25)