USACO2.1.3 三值排序
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,2,3的数量,将数组分为3个区域。首先将第一区域的数字2与第二区域的1交换,再将第一区域的数字3与第三区域数字1交换(若第一区域有数字3但是第三区域没有数字1,则先将数字2与数字3交换,
然后将第一区域的2与第二区域1交换,直到第一区域完全是1);然后将第二区域的数字3与第二区域的数字2交换;
#include<stdio.h>
#include<string.h>
int a[],b[];
int main()
{
int i,j,n,b=,p=,k=,ans=,t;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==)
b++;
if(a[i]==)
p++;
if(a[i]==)
k++;
}//分别统计数字1,2,3的数量
for(i=;i<=b;i++)
{
if(a[i]==){
ans++;
for(j=b+;j<=b+p;j++)
{
if(a[j]==)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}//交换1,2位置
}
}
if(a[i]==)
{
int count=;
ans++;
for(j=b+p+;j<=b+p+k;j++)
{
if(a[j]==)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
else
count++;
if(count==k)
{
t=a[i];
a[i]=a[j];
a[j]=t;
i--;
}
}
} }
for(i=b+;i<=b+p;i++)
{
if(a[i]==)
{
ans++;
for(j=b+p+;j<=b+p+k;j++)
{
if(a[j]==)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
}
printf("%d\n",ans);
return ;
}
第二次做的代码,交了20次才AC,好菜哦。
#include<cstdio>
#include<cstring>
#include<stack>
#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<vector>
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
const int Inf=0x3f3f3f3f;
int m,n;
int str[];
int visit[][];
int dis[][];
int di[][]={{-,},{,},{,-},{,}};
map<ll,ll>::iterator it;
struct node
{
int a;
int b;
}edge[];
int cmp(node a,node b)
{
if(a.a==b.a)
return a.b>b.b;
return a.a<b.a;
}
int Scan()
{
int res = , flag = ;
char ch;
if ((ch = getchar()) == '-')
{
flag = ;
}
else if(ch >= '' && ch <= '')
{
res = ch - '';
}
while ((ch = getchar()) >= '' && ch <= '')
{
res = res * + (ch - '');
}
return flag ? -res : res;
}
int main()
{
cin>>m;
for(int i=;i<m;i++)
{
cin>>edge[i].a>>edge[i].b;
}
sort(edge,edge+m,cmp);
int cnt=edge[].b;
int k=edge[].b-edge[].a;
int kk=,flag=;
int from=edge[].a;
for(int i=;i<m;i++)
{
if(edge[i].a<=cnt)
{
cnt=max(cnt,edge[i].b);
k=max(k,cnt-from);
}
else
{
flag=;
k=max(k,edge[i].b-edge[i].a);
kk=max(kk,edge[i].a-cnt);
from=edge[i].a;
cnt=edge[i].b;
}
}
cout<<k<<" "<<kk<<endl;
}
USACO2.1.3 三值排序的更多相关文章
- Sorting a Three-Valued Sequence(三值排序)
Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...
- 洛谷P1459 三值的排序 Sorting a Three-Valued Sequence
P1459 三值的排序 Sorting a Three-Valued Sequence 166通过 369提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 那么 ...
- 【USACO 2.1.3】三值的排序
[题目描述] 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排 ...
- Sorting a Three-Valued Sequence(三值的排序)
Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...
- 洛谷 Sorting a Three-Valued Sequence 三值的排序
Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...
- 洛谷 P1459 三值的排序 Sorting a Three-Valued Sequence
P1459 三值的排序 Sorting a Three-Valued Sequence 题目描述 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者 ...
- P1459 三值的排序 Sorting a Three-Valued
题目描述 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排成升 ...
- 排序—时间复杂度为O(n2)的三种排序算法
1 如何评价.分析一个排序算法? 很多语言.数据库都已经封装了关于排序算法的实现代码.所以我们学习排序算法目的更多的不是为了去实现这些代码,而是灵活的应用这些算法和解决更为复杂的问题,所以更重要的是学 ...
- ElasticSearch 2 (34) - 信息聚合系列之多值排序
ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...
随机推荐
- CollectionUtils工具类使用指南
CollectionUtils提供很多对集合的操作方法,常用的方法如下:(参考文章:http://www.open-open.com/code/view/1420470842125) import o ...
- POSIX线程同步
在posix编程中,如果在不同的线程中几乎同一时间操作同一个变量的时候,就会出现不同步. 如何解决这样的问题,这里需要用到互斥量,互斥锁的概念.请看UNIX环境高级编程P299页 #include & ...
- 跟我学Delphi Xe4 开发 IOS 一 , 重读Delphi Xe4 自带文档.
安装了 Delphi Xe4 之后打开这个地址就是完整的官方的文档了. 虽然不是立刻能解决你的问题. 但也是必须要看一遍的. 最基础的都在这里了. ms-help://embarcadero.rs_x ...
- vs无法调试 ,还没有为该文档加载任何符号
如何:启用非托管代码调试 位于“项目设计器”的“调试”页上的“非托管代码调试”属性确定是否支持本机代码调试. 如果要调用 COM 对象,或启动调用您的项目的.以本机代码编写的自定义程序,并且需要调 ...
- docx转doc时,防止公式被转成图片的解决办法
编辑社回复需要doc(Word 97-2003)格式的文档,可是将docx(Word 2007+)另存为doc格式时,发现公式被转成了图片.其实,最简单的办法就是,打个电话过去给编辑社:“大爷,拜托您 ...
- LeetCode Split Array into Consecutive Subsequences
原题链接在这里:https://leetcode.com/problems/split-array-into-consecutive-subsequences/description/ 题目: You ...
- gradle wrapper 简单使用
其实就是对于gradle 的一个包装,保证了项目版本的一致,同时减少配置 1. 生成wrapper // 使用gradle wrapper 命令 gradle wrapper 输出效果如下: [r ...
- fn project 试用之后的几个问题的解答
今天试用fnproject 之后自己有些思考,后面继续解决 1. 目前测试是强依赖 dockerhub 的,实际可能不是很方便 2. 如何与k8s .mesos.docker swarm 集成 ...
- as3随机数
for(var i:int = 0;i<100;i++){ trace(Math.floor(Math.random()*3)); } Math.floor(Math.random()*3 ...
- linux 本地账号密码无法登陆(shell可以登录),一直返回 登陆的login界面
今天我在我虚拟机测试的时候遇到了一个问题.登陆centos一直是返回login,账号和密码没错,我也换了两个用户. 1.问题描述 我正常的输入用户名和密码 错误提示截图:返回登陆界面,我重新试了另外的 ...