PAT(甲级)1067
2015-09-26 11:13
351 查看
1067. Sort with Swap(0,*) (25)
时间限制150 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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 <cstdio> #include <cstring> #define SIZE 100005 int a[SIZE]; int aindex[SIZE]; void swap(int &a,int &b) { int tmp=a; a=b; b=tmp; } int main() { int N,i,tmp,count=0; scanf("%d",&N); memset(a,0,sizeof(int)*SIZE); memset(aindex,0,sizeof(int)*SIZE); for(i=0;i<N;i++){ scanf("%d",&tmp); a[i] = tmp; aindex[tmp] =i; } for(i=0;i<N;i++){ if(a[i] != i){ swap(a[i],a[aindex[i]]); count++; } } printf("%d\n",count); return 0; }
相关文章推荐
- Ubuntu14.04安装OpenCV3.0
- web admin框架的异步加载设计
- HDFS 2.7.1 所有配置项
- Android实战简易教程<六十二>(电子Sensor精确罗盘)
- Android实战简易教程<二十一>(GridView动态添加Item)
- java代码
- 数据结构与算法学习
- 【Android杂谈】图片出现OOM解决办法总结
- PAT(甲级)1066
- 记录从毕业到最终选择IOS,以及其它一些情况
- 3dsMax 和 Unity的协作
- Java代码
- PAT(甲级)1065
- 灰盒测试
- win7系统下载声卡驱动器需要注意的三大事项
- Spring管理事务实现方式
- PAT(甲级)1064
- 浅谈拼接处理器中用到的几类接口
- unordered_set VS set
- 我的java代码