Section 2.1 sort3
来源:互联网 发布:js解析二维码图片 编辑:程序博客网 时间:2024/06/05 06:18
题目大意
排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。 写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
输入格式
line 1: Nline 1-N+1:每行一个数字,表示奖牌。
输出格式
共一行,一个数字。表示排成升序所需的最少交换次数。
样例输入
9221333231
样例输出
4
题解
首先考虑两个数字的情况,很简单只要将没排序的序列和已经排好序的序列放一起,然后交换位置不对应的数字就可以了。当变成三个数字时,和两个数字作一样考虑,先将只是两个数字相互错位的情况直接交换位置即可。当涉及到三个数字轮换位置时,很明显需要两次交换。
代码
#include<stdio.h>int main(){ int N; int a[4]={0},b[2010]={0},c[2010]={0}; scanf("%d",&N); int i,j,t,count=0,s=0; for(i=0;i<N;i++) { scanf("%d",&b[i]); a[b[i]]++; } for(i=0;i<a[1];i++) c[i]=1; for(i=a[1];i<a[1]+a[2];i++) c[i]=2; for(i=a[1]+a[2];i<a[1]+a[2]+a[3];i++) c[i]=3; /*for(i=0;i<N;i++) { printf("%d %d\n",b[i],c[i]); }*/ for(i=0;i<N;i++) { if(b[i]!=c[i]) for(j=i+1;j<N;j++) { if(b[j]==c[i]&&c[j]==b[i]) { t=b[j]; b[j]=b[i]; b[i]=t; count++; break; } } }/* for(i=0;i<N;i++) { printf("%d %d\n",b[i],c[i]); } printf("%d\n",count);*/ for(i=0;i<N;i++) if(b[i]!=c[i]) s++; count=count+2*s/3; printf("%d\n",count); return 0;}
阅读全文
0 0
- Section 2.1 sort3
- usaco 2.1.3 sort3
- 2.1 sort3三值排序
- usaco 2.1 sort3 2008.5.20
- USACO 2.1 Sorting A Three-Valued Sequence (sort3)
- USACO sort3
- USACO sort3
- usaco sort3
- usaco——sort3
- 我的 usaco sort3
- Section 2.1 The Castle
- Section 2.1 Ordered Fractions
- Section 2.1 Healthy Holsteins
- Section 2.1 Hamming Codes
- USACO Section 2.1 题解
- SICP Section 2.1.3
- SICP Section 2.1.4
- USACO Section 2.1
- E
- mybatis(8)--sqlMapConfig的一些小知识点
- Hello World!
- XML解析
- 最长括号匹配——递推
- Section 2.1 sort3
- 如何将OpenGL渲染的图片保存到本地(正常渲染和离屏渲染)
- 安卓之ContentProvider内容提供者
- Java多线程系列-- 之 join()
- 查询时序数据库中的数据
- 阿里云ECS申请免费ssl证书,实现Tomcat访问域名,使用Https访问
- LeetCode#22* Generate Parentheses
- 用户输入月份 打印月份对应的季节
- 几个有用的STL函数和编程中的一些细节处理