洛谷 P1105 平台
2024-08-30 16:45:07
题目描述
空间中有一些平台。给出每个平台的位置,请你计算从每一个平台的边缘落下之后会落到哪一个平台上。注意,如果某两个平台的某个两边缘横坐标相同,物体从上面那个平台落下之后将不会落在下面那个平台上。平台不会重叠,不会有两个平台的边缘碰在一起。
输入输出格式
输入格式:
第一行有一个数N表示平台的个数;
接下来N行每行3个整数 分别是平台的高度H[i],左端点的X坐标L[i],右端点的X坐标R[i].
其中,1<=N<=1000 0<=H,L,R<=20000。
输出格式:
输出共N行 每行2个数 分别是
从第i个平台的左边缘落下后到达的平台序号 和 右边缘落下以后到达的平台序号。
输入数据中第一个平台的序号是1。如果某个平台的某个边缘下面没有平台了,输出0。
输入输出样例
说明
思路:贪心。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct nond{
int h,l,r,id,ansl,ansr;
}v[];
int cmp(nond a,nond b){
if(a.h==b.h) return a.l<b.l;
return a.h>b.h;
}
int cmp1(nond a,nond b){
return a.id<b.id;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d%d",&v[i].h,&v[i].l,&v[i].r);
v[i].id=i;
}
sort(v+,v++n,cmp);
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
if(v[i].ansl&&v[i].ansr) break;
if(!v[i].ansl&&v[j].l<v[i].l&&v[j].r>v[i].l) v[i].ansl=v[j].id;
if(!v[i].ansr&&v[j].l<v[i].r&&v[j].r>v[i].r) v[i].ansr=v[j].id;
}
}
sort(v+,v++n,cmp1);
for(int i=;i<=n;i++)
cout<<v[i].ansl<<" "<<v[i].ansr<<endl;
}
最新文章
- PyVISA介绍
- UVa 297 Quadtrees -SilverN
- WM_SETFOCUS和WM_KILLFOCUS、WM_GETDLGCODE、CM_ENTER...
- hadoop环境搭建笔记
- 如何编写一个简单的makefile
- android anim 动画效果
- SELECT 场 FROM 表 WHERE 字段 Like 条件
- 十、Python练习----基础搭建飞机大战
- 2、Libgdx配置你的开发环境(Eclipse,Intellij IDEA,NetBeans)
- 集合源码分析[3]-ArrayList 源码分析
- 使用synchronized的几种场景
- Xamarin.Android ImageView 图片圆角显示
- CentOS TinyProxy http(s)上网代理及置代理上网的方法
- 论文阅读笔记二十六:Fast R-CNN (ICCV2015)
- 基于CSS属性display:table的表格布局的使用
- 【转载】 强化学习(八)价值函数的近似表示与Deep Q-Learning
- Login case
- bzoj1594 Pku3764 The xor-longest Path
- (转)C#中base关键字的几种用法
- JAVA虚拟机关闭钩子(Shutdown Hook)