首页 > 其他 > 详细

【PAT甲级】1067 Sort with Swap(0, i) (25 分)

时间:2019-11-01 20:01:09      阅读:88      评论:0      收藏:0      [点我收藏+]

题意:

输入一个正整数N(<=100000),接着输入N个正整数(0~N-1的排列)。每次操作可以将0和另一个数的位置进行交换,输出最少操作次数使得排列为升序。

代码:

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int a[100007],b[100007];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
int ans=n-1;
for(int i=0;i<n;++i){
cin>>a[i];
b[a[i]]=i;
if(a[i]==i&&a[i])
--ans;
}
int sum=0;
int pos=1;
while(ans){
if(b[0]!=0){
swap(b[0],b[b[0]]);
++sum;
--ans;
}
else{
for(int i=pos;i<n;++i)
if(b[i]!=i){
swap(b[0],b[i]);
++sum;
pos=i+1;
break;
}
}
}
cout<<sum;
return 0;
}

【PAT甲级】1067 Sort with Swap(0, i) (25 分)

原文:https://www.cnblogs.com/ldudxy/p/11778616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!