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 是如何 ...
随机推荐
- 条款5.了解c++默默编写并且调用了哪些函数。
如果想在一个内含reference成员的class内支持赋值操作,必须自己定义copy assignment操作符.而且面对“内含有const成员的”class,编译器的反应也是相同的,由于更改con ...
- 如何在100万文字的文章中 200ms内 快速提取 替换 上万个关键字
关键点: 关键字 组合 成一棵 hash 树 ( 有属性就直接移动指针到下一个字对象, 没有属性就创建子对象, 再移动指针; 第二次循环在子对象看有没这个属性 ) 探测针 标记结束 ...
- Zookeeper集群是如何升级到新版本的
方案1:复用老数据方案 这是经过实践的升级方案,该方案是复用旧版本的数据,zk集群拓扑,配置文件都不变,只是启动的程序为最新的版本. 参考文章: Zookeeper集群是如何升级到新版本的 方案2:重 ...
- CSS3实现多列纵向滚动
效果如图: 小程序wxml: <view class='wraper'> <view class="header"> 头部 </view> &l ...
- kali视频学习(11-15)
第四周kali视频(11-15)学习 11.漏洞分析之OpenVAS使用 12.漏洞分析之扫描工具 13.漏洞分析之WEB爬行 14.漏洞分析之WEB漏洞扫描(一) 15.漏洞分析之WEB漏洞扫描(二 ...
- C#防止程序多次运行
经过我的测试,还比较好用,但是有个问题,如果不注销,用另一个用户进入,则程序不能判断出已运行.所以只限于用在单用户环境,还是不太完美. class Program { [STAThread] stat ...
- Ununto16.04版本Docker的安装2018年最新版本
最近参照网上教程安装ubuntu的Docker怎么都不成功,我最后参照官方文档成功安装 https://docs.docker.com/engine/installation/linux/docker ...
- 主窗体上按钮jig画图时,CAD得不到焦点的问题
主窗体上按钮jig画图时,CAD得不到焦点的问题 按钮不要用 Click 事件,用 MouseDown 事件, 可完美解决该问题 1.试过CAD窗体获得焦点,不顶用 2.试用用命令行去执行,可行 ...
- Host ASP.NET WebApi in Owin
什么是OWIN Owin其实是微软为了解耦.Net Web app对IIS的依赖而制定的一套规范,规范定义了Web Server与Web App之间的接口,这样Web App就可以Host在所有兼容O ...
- AIX PowerHA (HACMP) Commands
PowerHA(HACMP) Commands How to start cluster daemons (options in that order: clstrmgr, clsmuxpd, br ...