题目描述

排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。

写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数

输入输出格式

输入格式:

第一行:

奖牌个数N (1 <= N <= 1000)

第 2行到第N+1行:

每行一个数字,表示奖牌。共N行。(1…3)

输出格式:

共一行,一个数字。表示排成升序所需的最少交换次数。

输入输出样例

输入样例#1:

9

2

2

1

3

3

3

2

3

1

输出样例#1:

4

说明

USACO 2.1

翻译来自NOCOW

先讨论一次交换还两个的比如正确的摆放位置为123,现在为321,交换一次,就是先讨论在彼此区域的值,在讨论一次交换不能的出来,两次交换才能换出三个值。

#include <cstdio>
#include <iostream>
using namespace std;
int num[1001], count[4], a[4], n, k = 1;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++, k++) {
scanf("%d", &num[k]);
count[num[k]]++;
}
for (int i = 1; i <= count[1] + count[2]; i++) {
if (num[i] == 3) {
a[3]++;
}
else if (num[i] == 2 && i <= count[1]) {
a[1]++;
}
else if (num[i] == 1 && i > count[1]) {
a[2]++;
}
}
printf("%d\n", a[3] + (a[1] > a[2] ? a[1] : a[2]));
return 0;
}

最新文章

  1. Java IO 操作(一)
  2. Windows系统bug
  3. C#实现鸽巢排序
  4. PLSQL 的简单命令之五
  5. 交叉编译安装ARM平台上的Qt
  6. [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
  7. mybatis配置方法
  8. Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性
  9. 基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载
  10. Can you solve this equation?
  11. Docker Data Center系列(二)- UCP安装指南
  12. json相关安全问题
  13. 激活WIN10系统
  14. 数据库——MongoDB
  15. Gardener Bo (树剖 + 问题分解)
  16. sqlalchem表关联(一对多,一对一,多对多)
  17. Delphi 完全时尚手册之 Visual Style 篇 (界面不错) 转自http://blog.csdn.net/iseekcode/article/details/4733229
  18. js命名空间写法
  19. java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
  20. Tomcat服务器(一)

热门文章

  1. Python zipfile模块学习
  2. spark error Caused by: java.io.NotSerializableException: org.apache.hadoop.hdfs.DistributedFileSystem
  3. sql 案例
  4. [安卓] 21、android studio 疑难杂症
  5. 【题解】LOJ2462完美的集合(树DP 魔改Lucas)
  6. 带你走进神一样的Elasticsearch索引机制
  7. 干货:python面对对象类继承简介
  8. stand up meeting 1/7/2016
  9. python调用小豆机器人实现自己的机器人!
  10. Git敏捷开发--常用别名