1067. Sort with Swap(0,*) (25)
2017-10-08 11:49
495 查看
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
这道题目正着记录还不行,一定要换一种思路,数组记录的是每个数字的位置,而不是每个位置放的是什么数字
#include <cstdio> #include <vector> using namespace std; int main() { int count, index = 0, diff = 0, ans = 0; int data[100000]; scanf("%d", &count); for(int i = 0; i < count; i++){ int num; scanf("%d", &num); data[num] = i; if(num != i) diff++; } while(diff > 0){ if(data[0] != 0){ int temp = data[0]; data[0] = data[data[0]]; data[temp] = temp; ans++; diff--; if(data[0] == 0) diff--; } else{ for(int i = index; i < count; i++){ if (i != data[i]){ index = i; data[0] = data[i]; data[i] = 0; ans++; diff++; break; } } } } printf("%d\n", ans); return 0; }
相关文章推荐
- 1067. Sort with Swap(0,*) (25)
- 【PAT】【Advanced Level】1067. Sort with Swap(0,*) (25)
- 【PAT甲级】1067. Sort with Swap(0,*) (25)
- PAT-A 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25) PAT甲级
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题
- 1067. Sort with Swap(0,*) (25)
- PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)解题报告