• 洛谷 P1105 平台


    题目描述

    空间中有一些平台。给出每个平台的位置,请你计算从每一个平台的边缘落下之后会落到哪一个平台上。注意,如果某两个平台的某个两边缘横坐标相同,物体从上面那个平台落下之后将不会落在下面那个平台上。平台不会重叠,不会有两个平台的边缘碰在一起。

    输入输出格式

    输入格式:

     

    第一行有一个数N表示平台的个数;

    接下来N行每行3个整数 分别是平台的高度H[i],左端点的X坐标L[i],右端点的X坐标R[i].

    其中,1<=N<=1000 0<=H,L,R<=20000。

     

    输出格式:

     

    输出共N行 每行2个数 分别是

    从第i个平台的左边缘落下后到达的平台序号 和 右边缘落下以后到达的平台序号。

    输入数据中第一个平台的序号是1。如果某个平台的某个边缘下面没有平台了,输出0。

     

    输入输出样例

    输入样例#1: 复制
    5
    2 0 2
    4 1 3
    3 1 3
    5 3 4
    1 1 5
    
    输出样例#1: 复制
    0 5
    1 5
    1 5
    5 5
    0 0
    

    说明

    思路:贪心。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    struct nond{
        int h,l,r,id,ansl,ansr;    
    }v[10010];
    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=1;i<=n;i++){
            scanf("%d%d%d",&v[i].h,&v[i].l,&v[i].r);
            v[i].id=i;
        }
        sort(v+1,v+1+n,cmp);
        for(int i=1;i<=n;i++){
            for(int j=i+1;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+1,v+1+n,cmp1);
        for(int i=1;i<=n;i++)
            cout<<v[i].ansl<<" "<<v[i].ansr<<endl;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    堆排序(改进的简单选择排序)
    希尔排序(改进的直接插入排序)
    直接插入排序
    简单选择排序
    冒泡排序&排序算法简介
    处理器的体系结构
    虚拟存储器
    Python函数
    在主项目中添加子项目
    聚合分组查询
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7898406.html
Copyright © 2020-2023  润新知