当前位置:网站首页>1067 Sort with Swap(0, i)
1067 Sort with Swap(0, i)
2022-08-03 22:58:00 【Brosto_Cloud】
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 <iostream>
#include <algorithm>
using namespace std;
int n, a[100010], b[100010], ans, t, x, y, ind[100010], cnt, fIndex;
bool flag;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
b[i] = a[i];
ind[a[i]] = i;
}
sort(b, b + n);
for (int i = 1; i < n; i++) {
if (a[i] != b[i]) {
cnt++;//记录位置不对的个数
}
}
while (true) {
while (a[0] != 0) {
t = ind[0]; //t是0的下标
x = b[ind[0]]; //x是应该在此时0的位置的数
y = ind[x]; //y是 应该在此时0的位置的数 的下标
a[y] = 0;
a[t] = x;
ind[0] = y;
ind[x] = t;
ans++;
cnt--;
}
flag = 1;
if (cnt == 0) {//顺序不对的个数归零时排序已完成
printf("%d", ans);
break;
}
//此时a[0]=0,但是不一定完成移动,选择第一个顺序不对的数与0交换
for (int i = fIndex; i < n; i++) {//fIndex记录第一个顺序不对的数的下标,及时更新
if (a[i] != b[i]) {
ind[0] = i;
ind[a[i]] = 0;
a[0] = a[i];
a[i] = 0;
ans++;
flag = 0;
fIndex = i;
break;
}
}
if (flag) {
printf("%d", ans);
break;
}
}
return 0;
}测试点12超时 参考博客:[PAT]1067 Sort with Swap(0, i) (25 分)(运行超时解决办法)_刘好念的博客-CSDN博客
边栏推荐
- Websocket multi-threaded sending message error TEXT_PARTIAL_WRITING--Use case of spin lock replacing synchronized exclusive lock
- 二叉搜索树解决落叶问题
- Golang Chapter 2: Program Structure
- [Paper Reading] TRO 2021: Fail-Safe Motion Planning for Online Verification of Autonomous Vehicles Using Conve
- win10系统下yolov5-V6.1版本的tensorrt部署细节教程及bug修改
- Unity2021发布WebGL雾效消失问题
- Work Subtotal QT Packing
- Testng listener
- [MySQL Advanced] Creation and Management of Databases and Tables
- Embedded systems: overview
猜你喜欢

3D 语义分割——2DPASS

【论文阅读】TRO 2021: Fail-Safe Motion Planning for Online Verification of Autonomous Vehicles Using Conve

Summary bug 】 【 Elipse garbled solution project code in Chinese!

HCIP BGP lab report

走迷宫 BFS

如何创建一个Web项目

Pytest学习-setup/teardown

Boss: There are too many systems in the company, can you realize account interoperability?

FinClip最易用的智能电视小程序

win10系统下yolov5-V6.1版本的tensorrt部署细节教程及bug修改
随机推荐
Kotlin - 扩展函数和运算符重载
golang写的存储引擎,基于b+树,mmap
直播预告 | 构建业务智联,快速拥抱财务数字化转型
IELTS essay writing template
What is the difference between the generator version and the viewer version?
LabVIEW code generation error 61056
noip初赛
Websocket multi-threaded sending message error TEXT_PARTIAL_WRITING--Use case of spin lock replacing synchronized exclusive lock
"Digital Economy Panorama White Paper" Financial Digital User Chapter released!
举一个 web worker 的例子
Testng listener
为什么我们需要回调
SPOJ 2774 Longest Common Substring(两串求公共子串 SAM)
Summary bug 】 【 Elipse garbled solution project code in Chinese!
Zilliz 2023 Fall Campus Recruitment Officially Launched!
Recognized by International Authorities | Yunzhuang Technology was selected in "RPA Global Market Pattern Report, Q3 2022"
Another MySQL masterpiece published by Glacier (send the book at the end of the article)!!
Live Preview | Build Business Intelligence, Quickly Embrace Financial Digital Transformation
Golang第二章:程序结构
易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元