P1459 三值的排序 Sorting a Three-Valued
2024-10-09 00:29:57
题目描述
排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种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;
}
最新文章
- Java IO 操作(一)
- Windows系统bug
- C#实现鸽巢排序
- PLSQL 的简单命令之五
- 交叉编译安装ARM平台上的Qt
- [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
- mybatis配置方法
- Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性
- 基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载
- Can you solve this equation?
- Docker Data Center系列(二)- UCP安装指南
- json相关安全问题
- 激活WIN10系统
- 数据库——MongoDB
- Gardener Bo (树剖 + 问题分解)
- sqlalchem表关联(一对多,一对一,多对多)
- Delphi 完全时尚手册之 Visual Style 篇 (界面不错) 转自http://blog.csdn.net/iseekcode/article/details/4733229
- js命名空间写法
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- Tomcat服务器(一)
热门文章
- Python zipfile模块学习
- spark error Caused by: java.io.NotSerializableException: org.apache.hadoop.hdfs.DistributedFileSystem
- sql 案例
- [安卓] 21、android studio 疑难杂症
- 【题解】LOJ2462完美的集合(树DP 魔改Lucas)
- 带你走进神一样的Elasticsearch索引机制
- 干货:python面对对象类继承简介
- stand up meeting 1/7/2016
- python调用小豆机器人实现自己的机器人!
- Git敏捷开发--常用别名