2013年浙江大学免试研究生上机考试真题。

原题链接:PTA | 程序设计类实验辅助教学平台

题目描述

给定包含数字 {0, 1, 2,..., N−1} 的任一排列,很容易对它们进行升序排序。 但是如果只允许使用Swap(0, *) 操作呢? 例如,要对 {4, 0, 2, 1, 3} 进行排序,我们通过以下方式应用Swap操作达到排序的目的:

Swap(0, 1) => {4, 1, 2, 0, 3}
Swap(0, 3) => {4, 1, 2, 3, 0}
Swap(0, 4) => {0, 1, 2, 3, 4}

现在要求找到对 N 个非负整数的给定排列进行排序所需的最小交换次数

输入格式

每个输入文件包含一个测试用例,第一行为一个正整数N (≤1E5),第二行为一个排列序列 {0, 1, ..., N−1}。 一行中的所有数字都用空格分隔。

输出格式

对于每种情况,只需在一行中打印对给定排列进行排序所需的最小交换次数。

输入样例

10
3 5 7 2 6 4 9 0 8 1

输出样例

9

题目分析

浙大讲解视频:数据结构_浙江大学_中国大学MOOC(慕课)

排序的结果就是使每个数字在其对应的索引上,即a[0] = 0,...,a[N-1] = N-1。核心点在于:N个数字的排列由若干个独立的环组成。在环内对元素进行交换即可使数据归位。

一个包含n个数,且其中含0的环,需要n-1次Swap(0, *)使所有数字归位;对于一个包含n个数,且其中不含0的环,需要先进行一次Swap(0, *)使0入环,再进行(n+1)-1次Swap(0, *)使所有数据归位,合计共进行了n+1次交换;对于已经归位的单元素环,直接continue。

代码

使用C语言实现。

#include <stdio.h>
#define MAXN 100000int a[MAXN];int SwapNum(int a[], int N);int main() {int N;scanf("%d", &N);for (int i = 0; i < N; i++)scanf("%d", &a[i]);int re = SwapNum(a, N);printf("%d", re);return 0;
}int SwapNum(int a[], int N) {int ans = 0, count = 0;int temp_idx;int contain_0 = 0; // 环内是否包含0for (int i = 0; i < N; i++) {if (a[i] == i)    // 已经归位continue;while (a[i] != i) {if (a[i] == 0)contain_0 = 1;    // 环内包含0temp_idx = a[i];a[i] = i;i = temp_idx;count++;}if (contain_0)  // 包含0ans += (count - 1);else // 不包含0ans += (count + 1);contain_0 = 0;count = 0;}return ans;
}

测试结果

7-16 Sort with Swap(0, i) | PTA数据结构与算法——C语言实现相关推荐

  1. 7-10 公路村村通 (最小生成树Prim算法) | PTA数据结构与算法——C语言实现

    公路村村通 非常直白的最小生成树问题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通 ...

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

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

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

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

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

  5. PTA数据结构与算法题目集6-4 6-3 6-8

    PTA数据结构与算法题目集(中文) 6-4 链式表的按序号查找 ElementType FindKth( List L, int K ){int index = 0;while(L){++index; ...

  6. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

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

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

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

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

最新文章

  1. controller接收json数据_答疑 | 前后端分离,如何接收json数据?
  2. Python正在吞噬世界
  3. 使用resnet训练CIFAR10
  4. mysql引擎测试_MySQL MyISAM引擎和InnoDB引擎的性能测试
  5. svg圆弧进度条demo
  6. 【POJ】【最小生成树】1789 Truck History
  7. DotNetty 实现 Modbus TCP 系列 (一) 报文类
  8. 要成为年薪五十万的数据分析师,除了技术还需要什么?
  9. PoE交换机为什么值得你选择?
  10. 互联网日报 | 爱奇艺会员宣布11月13日起涨价;淘宝特价版月活用户破7000万;我国成功发射一箭十三星...
  11. 论文审稿回复LaTeX模板
  12. 谷歌翻译,一键复活脚本
  13. 软件设计模式学习总结
  14. Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
  15. Visual Studio Code中设置HTML/HTML5模板
  16. 南航里程每年清空吗_南航里程即将大幅贬值!此期限前使用仍能保值
  17. 奶制品生产与销售matlab,奶制品生产和销售
  18. 我司Spark迁移Hive数据到MongoDB生产案例代码
  19. 高校BBS最HOT的100个笑话(不看保证后悔终身)
  20. java spark 主成分分析算法(pca)

热门文章

  1. 边玩边学,15个学习Python 的编程游戏网站!
  2. 清风数学建模--回归系数的解释
  3. VC的调试中,AssertValid和Dump函数的应用(转载)
  4. 网速测试工具_在线网站速度测试工具
  5. Asp.net 用DataSet对象更新数据(SqlDataAdapter) DataTable加主键
  6. 怀胎的历程及注意事项(zhuan)
  7. 使用小乌龟TortoiseGit快速解决代码冲突的三种解决方法:
  8. matlab错误打印,错误使用 disp 输出参数太多。
  9. 遗传算法求解K图染色问题(java版)
  10. 再获国际权威技术研究机构认可!Rancher获评451 Research卓越创新者