PTA 1067 Sort with Swap(0, i) (25 分)(思维)
传送门:点我
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 (≤) 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
题目大意:给定n个数字(1到n),且每次只能跟0交换,问换成递增的最少步数。
思路:
核心是让每次交换尽量都把0和当前0这个位置的数组下标,这两个数换位置,这样就不浪费这一次交换。
记录下每个元素所在的位置存入数组pos,即pos数组存放的是pos[number]=ard,表示Number这个数字当前在ard这个位置
如果0不在第0个位置,那么每次可以交换0位置和0所在位置在递增之后应该有的元素。
比如说4 0 3 1 2。先把0和pos[0],即0和1交换,这样1就在它本来应该在的位置。数组变成了4 1 3 0 2,再交换,直到0回到了下标0这个位置。
这样一趟下来保证了每次操作都是有意义的,即每次交换都能把一个元素放回它应该在的位置。
如果这个元素这样交换下来,还没在它应该在的位置,即pos[number]!=number,那就让它去0呆着,下次交换会把它放回应该属于它的位置的。
参考博客:点我
代码:
#include<bits/stdc++.h>
using namespace std;
int pos[];
int main()
{
int n;
scanf("%d",&n);
for(int i = ; i < n ; i ++){
int x;
scanf("%d",&x);
pos[x] = i;
}
int cnt = ;
for(int i = ; i < n ; i ++){
if(pos[i] != i){
while(pos[] != ){
swap(pos[],pos[pos[]]);cnt++;
}//如果0不在数组下标为0这个位置,那可以不停的交换0所在位置数组下标 和 0这两个元素。
if(pos[i] != i){
swap(pos[],pos[i]);
cnt++;
}
}
}
printf("%d\n",cnt);
}
PTA 1067 Sort with Swap(0, i) (25 分)(思维)的更多相关文章
- PAT 甲级 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 ea ...
- 1067 Sort with Swap(0, i) (25 分)
Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...
- 1067 Sort with Swap(0, i) (25分)
Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...
- 【PAT甲级】1067 Sort with Swap(0, i) (25 分)
题意: 输入一个正整数N(<=100000),接着输入N个正整数(0~N-1的排列).每次操作可以将0和另一个数的位置进行交换,输出最少操作次数使得排列为升序. AAAAAccepted cod ...
- PTA 1067 Sort with Swap(0, i) (贪心)
题目链接:1067 Sort with Swap(0, i) (25 分) 题意 给定长度为 \(n\) 的排列,如果每次只能把某个数和第 \(0\) 个数交换,那么要使排列是升序的最少需要交换几次. ...
- PTA 10-排序6 Sort with Swap(0, i) (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/678 5-16 Sort with Swap(0, i) (25分) Given a ...
- 10-排序6 Sort with Swap(0, i) (25 分)
Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...
- A1067 Sort with Swap(0, i) (25 分)
一.技术总结 题目要求是,只能使用0,进行交换位置,然后达到按序排列,所使用的最少交换次数 输入时,用数组记录好每个数字所在的位置. 然后使用for循环,查看i当前位置是否为该数字,核心是等待0回到自 ...
- 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 ...
随机推荐
- APK重编译
最近沉迷某游戏 尝试了一些不可描述的东西 , 记录一下研究过程 具体是哪个app不公开 ... 准备工具 APKtool && signapk && jre .net ...
- mysql连接拍错总结
1. ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10060) ? 关闭网络防火墙.
- 中国商用分组密码SM4
SM4 密码算法结构 SM4 密码算法基本运算有两部分: 1.模2加:⊕,32比特异或运算 2.循环移位: <<< i ,把32位字循环左移i位 基本密码部件为 1非线性字节变换S盒 ...
- Go Example--组合函数
package main import ( "fmt" "strings" ) func Index(vs []string, t string) int { ...
- PythonStudy——字符编码 Character Encoding
测试一下学习字符编码的问题:解决乱码问题 数据 从 硬盘 => 内存 => cpu应用程序打开文本文件的三步骤1.打开应用程序2.将数据加载到内存中3.cpu将内存中的数据直接翻译成字符显 ...
- terraform 配置github module source
terraform 支持多种module 的source 配置 以下是一个简单的使用github source的demo 测试项目 项目结构 ├── init.tpl ├── main.tf 代码 ...
- Linux初级入门(第一次作业)
Linux初级入门 在本科期间学过一些Linux的简单命令,再次接触Linux不仅巩固了知识还学习到了很多新的东西. 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是 ...
- string formating字符串格式化,function函数,group组,recursion递归,练习
# -*- coding: UTF-8 -*- msg = 'i am {} my hobby is {}'.format('lhf',18) print(msg) msg1 = 'i am %s m ...
- tomcat 绑定域名 防止恶意域名绑定
http://aaronlong31.iteye.com/blog/1123260 今天公司一台服务器被很多恶意域名绑定了,电信的要我们赶紧处理,否则封IP. 服务器使用的是tomcat,上谷歌搜了很 ...
- Python面向过程编程
面向过程编程 D:\Document\视频\python20期\day4\视频\面向过程编程 三元表达式示例1 #三元表达式x=10 y=20 res=x if x>y else y print ...