1067. Sort with Swap(0,*) (25)
来源:互联网 发布:婚纱照软件哪个好 编辑:程序博客网 时间:2024/06/06 12:56
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
对一个序列排序,每次的操作只能是一个非零的数与零交换位置。同时维护 索引->值 和 值->索引 两个数组。如果索引为0处值为0,有两种情况:一是已经排序好了,这样就可以退出循环,二是还没有排序好,就选第一个还没到位的数与零进行交换。如果索引为0处的值不为0,也即零的索引值不为0,则将零与零的索引值交换(即将零的索引值“送“到合适的位置,使该值等于该值的索引值),同时也要更新索引值数组。
代码:
#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <vector>using namespace std;int main(){int n;scanf("%d",&n);vector<int>a(n);vector<int>idx(n);for(int i=0;i<n;i++){scanf("%d",&a[i]);idx[a[i]]=i;}int count=0,i=1;while(true){if(a[0]==0){for(i;i<n;i++){if(a[i]!=i){break;}}if(i==n) break;else{swap(a[0],a[i]);swap(idx[a[0]],idx[a[i]]);count++;}}else{swap(a[idx[idx[0]]],a[idx[0]]);swap(idx[idx[0]],idx[0]);count++;}}printf("%d\n",count);}
- 1067. Sort with Swap(0,*) (25)
- 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)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 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)
- 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)
- 1067. Sort with Swap(0,*) (25)
- SpringMvc自动任务调度之task实现项目源码
- HDU 1576 A/B(拓展欧几里得)
- linux shell 管道命令(pipe)使用及与shell重定向区别
- Java WebService 简单实例
- 挂机型外挂开发-游戏数据管理类
- 1067. Sort with Swap(0,*) (25)
- LINUX 下chmod|chown|chgrp和用法和区别
- Ubuntu下彻底删除wine
- KeeperErrorCode = Unimplemented for /service 错误
- 一行jQuery代码搞定checkbox 全选和全不选
- C++学习笔记(更新中)
- 使用linux c 实现linux控制台 ls 命令
- Python字符编码详解
- 《剑指offer》连续子数组的最大和