当前位置:网站首页>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博客
边栏推荐
- 静态文件快速建站
- 易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元
- Cloud platform construction solutions
- [MySQL Advanced] Creation and Management of Databases and Tables
- Zilliz 2023 秋季校园招聘正式启动!
- log4j-slf4j-impl cannot be present with log4j-to-slf4j
- Quickly build a website with static files
- 2022-08-02 mysql/stonedb慢SQL-Q18-内存使用暴涨分析
- 生成器版和查看器版有什么区别?
- Kotlin - extension functions and operator overloading
猜你喜欢
随机推荐
pikachu Over permission
静态文件快速建站
noip preliminary round
Walk the Maze BFS
BMN: Boundary-Matching Network for Temporal Action Proposal Generation Reading Notes
电商秒杀系统
Pytest learn-setup/teardown
for loop exercises
UVa 10003 - Cutting Sticks (White Book, Interval DP)
HDU 5655 CA Loves Stick
完全二叉树问题
IELTS essay writing template
Network basic learning series four (network layer, data link layer and some other important protocols or technologies)
V8中的快慢数组(附源码、图文更易理解)
Golang Chapter 1: Getting Started
ML之yellowbrick:基于titanic泰坦尼克是否获救二分类预测数据集利用yellowbrick对LoR逻辑回归模型实现可解释性(阈值图)案例
override learning (parent and child)
Take an example of a web worker
SPOJ 2774 Longest Common Substring(两串求公共子串 SAM)
First domestic open source framework 】 【 general cloud computing framework, any program can be made into cloud computing.









