洛谷 Sorting a Three-Valued Sequence 三值的排序
Description
排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候。 在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。 写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
Input
Line 1: N (1 <= N <= 1000) Lines 2-N+1: 每行一个数字,共N行。(1..3)
Output
共一行,一个数字。表示排成升序所需的最少交换次数。
Sample Input
- 9
- 2
- 2
- 1
- 3
- 3
- 3
- 2
- 3
- 1
Sample Output
- 4
- 这个题以前做过一次,现在在巩固一下。
- 对于不在正确位置的数字,会有两种方式,一种是 “ 1 3 2 ”(有一个数字在正确位置),这样只需要交换一次即可,另一种是“ 3 1 2 ”(三个数字都不在正确的位置),这样需要交换两次。
如果全部的第一种方式已经修正完毕,那么剩下的就只有第二种方式了。- 将线段划分成三个区间,然后将这三个区间抽象成三个点,转化为“ 1 2 3 ”这三个数的排列方式。
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<string>
- #include<cmath>
- #include<algorithm>
- #include<queue>
- #include<stack>
- #include<deque>
- #include<map>
- #include<iostream>
- using namespace std;
- typedef long long LL;
- const double pi=acos(-1.0);
- const double e=exp();
- const int N = ;
- struct num{
- int a;
- int b;
- int c;
- }num[];
- int con[];
- int main()
- {
- int i,p,j,n;
- int a,b,c,aa,bb,cc;
- a=b=c=aa=bb=cc=;
- memset(num,,sizeof(num));
- scanf("%d",&n);
- for(i=;i<=n;i++)
- {
- scanf("%d",&con[i]);
- if(con[i]==)
- aa++;
- else if(con[i]==)
- bb++;
- else
- cc++;
- }
- for(i=;i<=aa;i++)
- {
- if(con[i]==)
- num[].a++;
- if(con[i]==)
- num[].b++;
- if(con[i]==)
- num[].c++;
- }
- for(i=aa+;i<=aa+bb;i++)
- {
- if(con[i]==)
- num[].a++;
- if(con[i]==)
- num[].b++;
- if(con[i]==)
- num[].c++;
- }
- for(i=aa+bb+;i<=n;i++)
- {
- if(con[i]==)
- num[].a++;
- if(con[i]==)
- num[].b++;
- if(con[i]==)
- num[].c++;
- }
- // for(i=1;i<=3;i++)
- // printf("%d %d %d\n",num[i].a,num[i].b,num[i].c);
- int ans=,mid;
- if(num[].b!=&&num[].a!=)
- {
- mid=min(num[].b,num[].a);
- ans+=mid;
- num[].b-=mid;
- num[].a-=mid;
- }
- if(num[].c!=&&num[].a!=)
- {
- mid=min(num[].c,num[].a);
- ans+=mid;
- num[].c-=mid;
- num[].a-=mid;
- }
- if(num[].c!=&&num[].b!=)
- {
- mid=min(num[].c,num[].b);
- ans+=mid;
- num[].c-=mid;
- num[].b-=mid;
- }
- ans+=(num[].b+num[].c+num[].a+num[].c+num[].a+num[].b)/*;
- printf("%d\n",ans);
- return ;
- }
洛谷 Sorting a Three-Valued Sequence 三值的排序的更多相关文章
- 洛谷P1459 三值的排序 Sorting a Three-Valued Sequence
P1459 三值的排序 Sorting a Three-Valued Sequence 166通过 369提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 那么 ...
- 洛谷 P1459 三值的排序 Sorting a Three-Valued Sequence
P1459 三值的排序 Sorting a Three-Valued Sequence 题目描述 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者 ...
- 【题解】洛谷P4281 [AHOI2008] 紧急集合(求三个点LCA)
洛谷P4281:https://www.luogu.org/problemnew/show/P4281 思路 答案所在的点必定是三个人所在点之间路径上的一点 本蒟蒻一开始的想法是:先求出2个点之间的L ...
- Sorting a Three-Valued Sequence(三值的排序)
Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...
- 洛谷P4581 [BJOI2014]想法(玄学算法,拓扑排序)
洛谷题目传送门 萝卜大毒瘤 题意可以简化成这样:给一个DAG,求每个点能够从多少个入度为\(0\)的点到达(记为\(k\)). 一个随机做法:给每个入度为\(0\)的点随机一个权值,在DAG上求出每个 ...
- 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序
洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...
- 动态规划 洛谷P4017 最大食物链计数——图上动态规划 拓扑排序
洛谷P4017 最大食物链计数 这是洛谷一题普及/提高-的题目,也是我第一次做的一题 图上动态规划/拓扑排序 ,我认为这题是很好的学习拓扑排序的题目. 在这题中,我学到了几个名词,入度,出度,及没有环 ...
- P1459 三值的排序 Sorting a Three-Valued
题目描述 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排成升 ...
- 【USACO 2.1.3】三值的排序
[题目描述] 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排 ...
随机推荐
- 【第五周】alpha发布之小组评论
对于昨天的阿尔法发布,有那么几点需要说一下: 1,对这次阿尔法发布的过程,我们组还是基本顺利的,由于之前吃过亏,这次我提前试用了一下投影仪,做了些调试,之后的发布过程起码设备上是正常的. 2,我们的项 ...
- Spring mvc 数据验证框架注解
@AssertFalse 被注解的元素必须为false@AssertTrue 被注解的元素必须为false@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...
- 【前端学习笔记】JavaScript 小案例合集
获取一个0-9的随机数: Math.round(Math.random()*9); 去除数组中重复的元素: var arr=[1,3,5,4,3,3,1,4] function editArr(arr ...
- 第76天:jQuery中的宽高
Window对象和document对象的区别 1.window对象表示浏览器中打开的窗口 2.window对象可以省略,比如alert()也可以写成window.alert() Document对象是 ...
- bzoj4032-最短不公共子串
题意 给出两个长度小于等于2000的小写字母串,四个问题: A的最短子串不是B的子串 A的最短子串不是B的子序列 A的最短子序列不是B的子串 A的最短子序列不是B的子序列 分析 虽然求的是不公共,但是 ...
- Java虚拟机内存模型和volatile型变量
Java虚拟机内存模型 了解Java虚拟机的内存模型,有助于我们明白为什么会发生线程安全问题. 上面这幅图是<深入理解Java虚拟机-JVM高级特性与最佳实践>的书中截图. 线程共享的变量 ...
- Contest 7
A:搜索好难啊根本不会啊. B:原题都能写挂没救了啊.考虑求出每个数作为最小值时能向左向右扩展到的最远位置,那么这段区间里的所有数就不可能作为唯一的最小值成为最优解了,否则假设可以的话这段区间里的数都 ...
- [COGS1000]伊吹萃香 最短路
1000. [東方S2] 伊吹萃香 输入文件:suika.in 输出文件:suika.out 简单对比 时间限制:1 s 内存限制:128 MB Problem 4 伊吹萃香(suika. ...
- 飞舞的蝴蝶(GraphicsView框架)
飞舞的蝴蝶(GraphicsView框架) 一.简介 GraphicsView框架结构主要包含三个主要的类QGraphicsScene(容器).QGraphicsView(视图).QGraphicsI ...
- 【Cogs2187】帕秋莉的超级多项式(多项式运算)
[Cogs2187]帕秋莉的超级多项式(多项式运算) 题面 Cogs 题解 多项式运算模板题 只提供代码了.. #include<iostream> #include<cstdio& ...