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 分)【难度: 中 / 知识点: 置换群】相关推荐

  1. 【题意+分析】1067 Sort with Swap(0, i) (25 分)_24行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given any permutation of the numbers {0, 1, 2,-, N−1}, it is easy ...

  2. 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 ...

  3. 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 ...

  4. PAT甲级1067 Sort with Swap(0, i):[C++题解]此题不是很懂!!

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:y总从图论的角度来讲解的这道题,听得不是很懂. 此题不是很懂,暂留以后探讨.存在鸽的可能. ac代码 #include<bits ...

  5. 1067. Sort with Swap(0,*)

    好弱啊,这个题目折腾了好久. 构造hash表用来维护各个元素所在的位置,利用map维护一颗红黑树来保存还未确定的元素的位置. (1)用0不断的跟其他元素交换,每次交换都会保证一个元素在正确的位置. ( ...

  6. 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 ...

  7. PAT A1067 Sort with Swap(0, i) ——天街小雨润如酥,草色遥看近却无

    PAT A1067 Sort with Swap(0, i) 本题使用了姥姥教的方法,通过交换过程(第一个开始动的元素,通过一系列交换到达自己应该在的位置)可以发现他们形成了一个闭环,大家手拉手,每个 ...

  8. C++教程从0到1入门编程中知识点记录!

    C++教程从0到1入门编程中知识点记录! 一.C语言 1.冒泡排序 示例代码: #include <iostream> using namespace std; int main() { ...

  9. 算法 排序6 Sort with Swap(0, i) 2013年免试研究生上机考试真题

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:Given any permutation of the numbers {0, 1, 2,..., N−1}, ...

最新文章

  1. VoVNet、VarGNet、PeleeNet:轻量级实时网络(嵌入端)
  2. 国际泰斗:现在谈强人工智能为时尚早
  3. 修改mysql表的itemId字段为自增长SQL语句
  4. 那些年,冒死拍过的老师逗逼搞笑照片 !
  5. Linux中实现远程登录Xshell和Xftp
  6. cs224 - Lecture2: Word Vectors and Word Senses
  7. 企业基础管理薄弱,激励机制不健全怎么办?
  8. 【MFC】将当前的日期转化为1970年开始的秒计数
  9. Atitit refact art 重构的艺术 目录 1. Concept 1 1.1. Bp 1 2. Prob 2 3. Tool 2 1.Concept 1. legacy code遗留代
  10. Xamarin教程一:创建Android项目(VS2019 C#写安卓)
  11. Scala下载,安装及配置
  12. 阮一峰ES6之Generator函数理解
  13. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
  14. 漫漫的webim(一) web实现简易im功能
  15. VM ware安装Cent OS系统并配置静态IP
  16. ‘\t‘和“\t“的区别及作用
  17. echarts配合google地图,并自定义google地图的样式
  18. Python调用xbox手柄马达震动
  19. 送书 | 新书《Python量化金融编程从入门到精通》
  20. 如何将DWG另存为kml文件?

热门文章

  1. 凸集 凸函数 凸优化
  2. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
  3. 服务器控件的异步请求——UpdatePanel和ScriptManager
  4. CodeBlocks 更改 gui 程序为 命令行
  5. 【备忘】visual studio调试状态下显示lua调用栈
  6. 再次理解STM32中的堆栈机制
  7. STM32系统时钟默认设置
  8. 爬虫篇——selenium(webdriver)进行用户登录并爬取数据)
  9. 石墨烯区块链(2)核心功能
  10. Hyperledger Besu(3)“多用户架构”和“插件”