1067 Sort with Swap(0, i) (25 分)【难度: 中 / 知识点: 置换群】
https://pintia.cn/problem-sets/994805342720868352/problems/994805403651522560
这种相关的题目见过很多次了。
常见的是只可以交换相邻两项求,有序后最少的步数。这类模型直接求逆序对即可。
还有一种模型是可以任意的交换两个数,求有序后最小的步数,答案是 n-环的个数。
本题和上面的差不多的思路,不过是加了必须通过0来交换的这一条限制。
首先,可以分析的得出,这个数组对应图的话都是一个个的环,向这种只有环的图称为置换图
- 如果这个数本身是一个自环,那么说明他已经在对应的位置了,那么直接跳过。
- 如果一个环和0在同一个环内,共有cnt个点,那么我们需要交换 cnt-1 此。
- 如果一个环没有0,且共有cnt个点,那么首先我们得先将0加进来,然后再依次交换。加入进来1次操作,cnt+1个点交换 需要cnt次 故共cnt+1次
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],st[N],n,ans;
int main(void)
{cin>>n;for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n;i++){if(a[i]==i) continue;//自环if(!st[i]) {bool flag=false;int cnt=0;//点的个数for(int j=i;!st[j];j=a[j]){if(j==0) flag=true;cnt++;st[j]=1;}if(flag) ans+=cnt-1;//和零在同一个环else ans+=cnt+1;//和零不在同一个环}}cout<<ans<<endl;return 0;
}
1067 Sort with Swap(0, i) (25 分)【难度: 中 / 知识点: 置换群】相关推荐
- 【题意+分析】1067 Sort with Swap(0, i) (25 分)_24行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given any permutation of the numbers {0, 1, 2,-, N−1}, it is easy ...
- 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 ...
- 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 ...
- PAT甲级1067 Sort with Swap(0, i):[C++题解]此题不是很懂!!
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:y总从图论的角度来讲解的这道题,听得不是很懂. 此题不是很懂,暂留以后探讨.存在鸽的可能. ac代码 #include<bits ...
- 1067. Sort with Swap(0,*)
好弱啊,这个题目折腾了好久. 构造hash表用来维护各个元素所在的位置,利用map维护一颗红黑树来保存还未确定的元素的位置. (1)用0不断的跟其他元素交换,每次交换都会保证一个元素在正确的位置. ( ...
- 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 increasin ...
- PAT A1067 Sort with Swap(0, i) ——天街小雨润如酥,草色遥看近却无
PAT A1067 Sort with Swap(0, i) 本题使用了姥姥教的方法,通过交换过程(第一个开始动的元素,通过一系列交换到达自己应该在的位置)可以发现他们形成了一个闭环,大家手拉手,每个 ...
- C++教程从0到1入门编程中知识点记录!
C++教程从0到1入门编程中知识点记录! 一.C语言 1.冒泡排序 示例代码: #include <iostream> using namespace std; int main() { ...
- 算法 排序6 Sort with Swap(0, i) 2013年免试研究生上机考试真题
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:Given any permutation of the numbers {0, 1, 2,..., N−1}, ...
最新文章
- VoVNet、VarGNet、PeleeNet:轻量级实时网络(嵌入端)
- 国际泰斗:现在谈强人工智能为时尚早
- 修改mysql表的itemId字段为自增长SQL语句
- 那些年,冒死拍过的老师逗逼搞笑照片 !
- Linux中实现远程登录Xshell和Xftp
- cs224 - Lecture2: Word Vectors and Word Senses
- 企业基础管理薄弱,激励机制不健全怎么办?
- 【MFC】将当前的日期转化为1970年开始的秒计数
- Atitit refact art 重构的艺术 目录 1. Concept	1 1.1. Bp	1 2. Prob	2 3. Tool	2 1.Concept 	1. legacy code遗留代
- Xamarin教程一:创建Android项目(VS2019 C#写安卓)
- Scala下载,安装及配置
- 阮一峰ES6之Generator函数理解
- Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
- 漫漫的webim(一) web实现简易im功能
- VM ware安装Cent OS系统并配置静态IP
- ‘\t‘和“\t“的区别及作用
- echarts配合google地图,并自定义google地图的样式
- Python调用xbox手柄马达震动
- 送书 | 新书《Python量化金融编程从入门到精通》
- 如何将DWG另存为kml文件?
热门文章
- 凸集 凸函数 凸优化
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
- 服务器控件的异步请求——UpdatePanel和ScriptManager
- CodeBlocks 更改 gui 程序为 命令行
- 【备忘】visual studio调试状态下显示lua调用栈
- 再次理解STM32中的堆栈机制
- STM32系统时钟默认设置
- 爬虫篇——selenium(webdriver)进行用户登录并爬取数据)
- 石墨烯区块链(2)核心功能
- Hyperledger Besu(3)“多用户架构”和“插件”