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

提交代码

思路:将序列转换为图,形成键-值关系

例如样例:3 5 7 2 6 4 9 0 8 1

对应的值:0 1 2 3 4 5 6 7 8 9

对应的键:3 5 7 2 6 4 9 0 8 1

发现3类环:

a.元素个数>1,包含0的环:0-7-2-3-0

b.元素个数>1,不包含0的环:1-9-6-4-5-1

c.元素个数==1的环:8

其实一张图无非也就最多存在上述3类环。

对于a:交换次数=环的元素个数-1

对于b:交换次数=环的元素个数+1

对于c:交换次数=0

所以,只要统计元素个数>1的环的情况即可。然后根据这些元素个数>1的环是否包含元素0来计算总的交换次数。

代码如下:

 #include<cstdio>
#include<stack>
#include<cstring>
#include<iostream>
#include<stack>
#include<set>
#include<map>
using namespace std;
map<int,int> ha;
bool vis[];
void DFS(int cur,int s){
vis[cur]=true;
if(ha[cur]==s){
return;
}
DFS(ha[cur],s);
}
//统计点的数量>1的环的个数,有0在的换交换次数是个数-1;没有0在的环,交换次数是个数+1
int main(){
//freopen("D:\\INPUT.txt","r",stdin);
int count,n;
scanf("%d",&n);
count=n;
int i,num;
for(i=;i<n;i++){
scanf("%d",&num);
if(num==i){//去掉元素个数为0的环,剩下的元素个数
vis[num]=true;
count--;
}
ha[num]=i;
}
//剩下的环除了包含元素0的环,其他环的交换次数=环自身元素个数+1
for(i=;i<n;i++){
if(!vis[i]){
DFS(i,i);
count++;
}
}
if(ha[]!=){//如果0不单独成环,说明有元素个数>1的环包含0,则这个环在34行时多加了2,这里减去
count-=;
}
printf("%d\n",count);
return ;
}

pat1067. Sort with Swap(0,*) (25)的更多相关文章

  1. PAT1067. Sort with Swap(0, *) (25) 并查集

    PAT1067. Sort with Swap(0, *) (25) 并查集 题目大意 给定一个序列, 只能进行一种操作: 任一元素与 0 交换位置, 问最少需要多少次交换. 思路 最优解就是每次 0 ...

  2. Pat1067:Sort with Swap(0,*)

    1067. Sort with Swap(0,*) (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue G ...

  3. 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise

    题目信息 1067. Sort with Swap(0,*) (25) 时间限制150 ms 内存限制65536 kB 代码长度限制16000 B Given any permutation of t ...

  4. 1067. Sort with Swap(0,*) (25)

    时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given any permutation of the num ...

  5. PAT Advanced 1067 Sort with Swap(0,*) (25) [贪⼼算法]

    题目 Given any permutation of the numbers {0, 1, 2,-, N-1}, it is easy to sort them in increasing orde ...

  6. PAT (Advanced Level) 1067. Sort with Swap(0,*) (25)

    只对没有归位的数进行交换. 分两种情况: 如果0在最前面,那么随便拿一个没有归位的数和0交换位置. 如果0不在最前面,那么必然可以归位一个数字,将那个数字归位. 这样模拟一下即可. #include& ...

  7. PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法

    贪心算法 次数最少的方法,即:1.每次都将0与应该放置在0位置的数字交换即可.2.如果0处在自己位置上,那么随便与一个不处在自己位置上的数交换,重复上一步即可.拿样例举例:   0 1 2 3 4 5 ...

  8. PAT 1067. Sort with Swap(0,*)

    1067. Sort with Swap(0,*) (25)   Given any permutation of the numbers {0, 1, 2,..., N-1}, it is easy ...

  9. 1067 Sort with Swap(0, i) (25 分)

    1067 Sort with Swap(0, i) (25 分) Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy ...

随机推荐

  1. web攻击之九:其它

    四.身份认证和会话 [攻击] 黑客在浏览器中停用JS,防止客户端校验,从而进行某些操作. [防御] 1.隐藏敏感信息. 2.对敏感信息进行加密. 3.session 定期失效 五.权限与访问控制 [攻 ...

  2. MATLAB模糊逻辑工具箱函数

    说明:本文档中所列出的函数适用于Matlab5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档. 1. GUI工具 Anfisedit      打开ANF ...

  3. Java探索之旅(12)——equals方法及其覆盖

    1.Object中的equals方法 java中的的基本数据类型:byte,short,char,int,long,float,double,boolean.==比较的是值. ❶作用:对于复合类型来说 ...

  4. arguments详解

    arguments 是什么? 是一个对象,一个 很像数组的对象 arguments内容是什么? 1是函数运行时的实参列表 2收到实参收集起来,放到一个arguments对象里 在词法分析中,首先按形参 ...

  5. [matlab]机器学习及SVM工具箱学习笔记

    机器学习与神经网络的关系: 机器学习是目的,神经网络是算法.神经网络是实现机器学习的一种方法,平行于SVM. 常用的两种工具:svm tool.libsvm SVM分为SVC和SVR,svc是专门用来 ...

  6. 31、NGS 常用分析软件

    转载:http://www.zilhua.com/2081.html 参考资料:http://bioinfo.mc.vanderbilt.edu/NGS/software.htm 1. Mapping ...

  7. IDEA如何启动debug?

    选择remote,然后,修改host和port: host是我们访问backstop的ip,端口是监听端口8787,点击ok即可. 打断点,调试,即可.

  8. 12. CTF综合靶机渗透(五)

    运行环境 Virtualbox (二选一) Vnware Workstation player 通关提示 fristi 设置 首先,我们在开始之前,我们按照作者的要求设置虚拟机的MAC地址 08:00 ...

  9. 利用MVC的Area作为二级域名

    此处使用的域名是我改了系统的hosts文件达到的 测试成功! 全局的注册方式 在Area的注册文件里进行配置 一个Area和一个外部的Controller 废话不多说,提供DEMO 下载地址

  10. Bootstrap栅格学习

    参考:https://segmentfault.com/a/1190000000743553 节选翻译自The Subtle Magic Behind Why the Bootstrap 3 Grid ...