首页 > 其他分享 >PAT_A1067 Sort with Swap(0, i)

PAT_A1067 Sort with Swap(0, i)

时间:2023-10-18 12:00:49浏览次数:30  
标签:Sort PAT int ne ++ swap permutation Swap

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 <bits/stdc++.h>
using namespace std;
const int N = 100000+5;
int e[N], c, n, r, p[N]; 

int main(){
	scanf("%d", &n);
	for(int i = 0; i < n; i++){
		scanf("%d", e+i);
		p[e[i]] = i;
		if(e[i] != 0 && e[i] == i) c++;
	}
	int ne = 1;
	while(c != n-1)
		if(p[0] != 0){
			swap(p[0], p[p[0]]);
			c++;
			r++;
		}else
			while(ne < n){
				if(p[ne] != ne){
					swap(p[0], p[ne]);
					r++;
					break;
				}
				ne++;
			}
	printf("%d", r);
	return 0;
}

总结
1、 #贪心 使用p数组存放各元素当前所处位置,e数组在这里无用。如果0的位置为i(i!=0),则swap(p[0], p[i]);如果i=0,让没有归位的元素的位置与之互换。
2、在寻找没有归位的元素时,如果每次从头开始寻找会超时 $o(n^2)$ ,有测试点无法通过。这里定义了ne,保存目前序列中本位上的最小元素(初始为1),每次从ne递增寻找 $o(n)$ 。

标签:Sort,PAT,int,ne,++,swap,permutation,Swap
From: https://www.cnblogs.com/Afinis/p/17771735.html

相关文章

  • 【git】git pull更新项目报错git error:invalid path
    1、报错内容error:invalidpath'xxxxxxx'原因是某分支下的文件名格式不支持,最终导致在gitclone的时候找不到这个文件路径导致的! 2、解决方法gitconfigcore.protectNTFSfalse作用是关掉NTFS下的路径保护机制,防止文件系统出错,这样就不存在找不到文件路径了......
  • 解决The following specifications were found to be incompatible with the existing
    解决"Thefollowingspecificationswerefoundtobeincompatiblewiththeexistingpythoninstallation"的问题当你尝试安装或更新Python包时,有时候你可能会遇到以下错误信息:plaintextCopycodeThefollowingspecificationswerefoundtobeincompatiblewiththeexisting......
  • 关于crontab运行脚本时报错KeyError: 'PATH'
    最近在服务器上为let'sencrypt证书添加自动续签计划任务时,发现总是不成功,但手动执行该计划任务所对应的sh脚本则没问题,这让我怀疑crontab执行时可能缺少了点什么导致的,想追踪一下crontab的执行日志,发现并没有,需要手动修改配置文件打开:sudovim/etc/rsyslog.d/50-default.conf......
  • 冒泡排序算法(Bubble Sort)—经典排序算法
    导言冒泡排序是最基本、最简单的排序算法之一,它通过多次遍历待排序的数组或列表,依次比较相邻的元素并交换位置,使得较大(或较小)的元素逐渐“浮”到数组的一端。原理分析冒泡排序算法通过多次遍历待排序的数组或列表,依次比较相邻的元素并交换位置,使得较大(或较小)的元素逐渐“浮”到数组......
  • jsonpath模块的知识点总结
    jsonpath模块$表示根节点.表示子节点..表示内部任意位置1,如何通过jsonpath取json里面的值导入jsonpath模块:fromjsonpathimportjsonpathdict={"key1":{"key2":{"key3":{"key4":{"key5":"request"}}}}}#1,普通的提取方式print(dict[&......
  • 无涯教程-NumPy - swapaxes函数
    此函数互换数组的两个轴,对于1.10之后的NumPy版本,将返回交换数组的视图,该函数采用以下参数。numpy.swapaxes(arr,axis1,axis2)Sr.No.Parameter&描述1arr要交换其轴的输入数组2axis1与第一个轴对应的int3axis2与第二个轴对应的int#Itcreatesa3dimen......
  • sortable 拖拽后数据变更但视图不变
    问题表格中某两行拖拽换序,使用sortable.js在拖拽结束后调用换序接口,再更新数据列表。问题是数据变了,但视图不变。如下图所示:分析vue无法检测数组中顺序的变化。即使采用$set,$forceUpdate(),给组件添加key属性,仍然无法解决该问题。解决办法请求数据列表前,先重置列表。......
  • 报错:Could not resolve view with name 'xxx' in servlet with name 'dispatcherServl
    报错:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Couldnotresolveviewwithname'xxx'inservletwithname'dispatcherServlet']withrootcauseCouldnotresolveviewwithname'xxx&......
  • PAT_A1070 Mooncake
    MooncakeisaChinesebakeryproducttraditionallyeatenduringtheMid-AutumnFestival.Manytypesoffillingsandcrustscanbefoundintraditionalmooncakesaccordingtotheregion'sculture.Nowgiventheinventoryamountsandthepricesofall......
  • sort是不稳定排序
    一道题调了一周,今天终于调过了……题目不算很难写,就是poj1007的DNAsorting,字符串求逆序数然后升序排序。之前交的代码是这样的:#include<iostream>#include<algorithm>usingnamespacestd;typedefstructnode{charstr[55];intnum;}Node;boolcmp(Nodea......