pat 1067 Sort with Swap(0,*) (25)
来源:互联网 发布:php正则表达式语法 编辑:程序博客网 时间:2024/05/18 03:05
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 1Sample Output:
9
#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <set>using namespace std;int num[100010], myIndex[100010], flag = 0;void mySwap(int num[], int a, int b) {int tmp = num[a];num[a] = num[b];num[b] = tmp;}void output(int num[], int n) {for (int i = 0; i < n; ++i){printf("%d ", num[i]);}printf("\n");}int main() {int n, cnt = 0, i;scanf("%d", &n);for(int i = 0; i < n; i++) {scanf("%d", &num[i]);myIndex[num[i]] = i;if(num[i] != i)flag += 1;}int first = 1;while(true) {int c1 = myIndex[0];if(c1 != 0) {int c2 = myIndex[c1];mySwap(num, c1, c2);myIndex[0] = c2;myIndex[c1] = c1;} else {for(i = first; i < n; i++) {if(num[i] != i) {myIndex[0] = i;myIndex[num[i]] = 0; mySwap(num, 0, i);first = i;break;}}if(i >= n) break;}cnt += 1;}printf("%d\n", cnt);return 0;}
- pat 1067 Sort with Swap(0,*) (25)
- PAT 1067 Sort with Swap(0,*)
- pat 1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25)
- 【PAT】1067. Sort with Swap(0,*) (25)
- PAT 1025Sort with Swap(0,*) (25)
- pat-1067. Sort with Swap(0,*) (25)
- pat-a1067. Sort with Swap(0,*) (25)
- PAT A1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- 浙大PAT 1067题 1067. Sort with Swap(0,*)
- Pat(Advanced Level)Practice--1067(Sort with Swap(0,*))
- PAT A 1067. Sort with Swap(0,*) (25)
- PAT 数据结构 08-排序5. Sort with Swap(0,*) (25)
- 【PAT甲级】1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25) PAT甲级
- PAT甲级.1067. Sort with Swap(0,*) (25)
- Android学习笔记(一)
- Java IO详解
- bzoj 1803(主席树)
- ClassLoader:类加载详解
- Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
- pat 1067 Sort with Swap(0,*) (25)
- 回归假设
- 文件的创建
- IPC机制之使用ContentProvider
- thinkphp自定义模板标签(一)
- SGI STL的空间配置器alloc
- 浅析设计模式之观察者模式
- (java) Populating Next Right Pointers in Each Node
- poj 2104 k-th number