【洛谷 P1105】平台 题解(结构体+暴力枚举)

news2024/10/8 15:06:17

平台

题目描述

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

如果有两个平台的高度相同且都可以被落到的话,那么会落到编号靠前的那个平台。

输入格式

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

接下来 N N N 行每行三个整数 分别是平台的高度 H i H_i Hi,左端点的 X X X 坐标 L i L_i Li,右端点的 X X X 坐标 R i R_i Ri

其中, 1 ≤ N ≤ 10 3 1 \le N \le {10}^3 1N103 0 ≤ H , L , R ≤ 2 × 10 4 0 \le H,L,R \le 2 \times {10}^4 0H,L,R2×104

输出格式

输出共 N N N 行,每行两个数,分别表示:

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

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

样例 #1

样例输入 #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

提示


思路

给定一些平台的高度、左右边缘坐标,求出每个平台落地时会落在哪个平台上。

定义一个S结构体,表示平台的高度、左右边缘坐标和编号。使用两层循环对每个平台进行处理,求出它落地时会落在哪个平台上。

对于每个平台,首先初始化左右边缘的落点和高度,然后从当前平台的下一个平台开始遍历,判断左边缘和右边缘是否可以落到,如果可以则更新对应的落点。在更新落点时需要考虑高度和编号的因素,如果有两个平台的高度相同且都可以被落到的话,需要落到编号靠前的那个平台。

最后输出每个平台的落点即可。

另外,需要注意的是,数组下标从1开始,因此循环时需要从1开始遍历到n。

注意:平台可能重叠。如果有两个平台的高度相同且都可以被落到的话,那么会落到编号靠前的那个平台。


AC代码

#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 100005;

struct S
{
    int h;
    int l;
    int r;
} p[maxn];

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> p[i].h >> p[i].l >> p[i].r;
    }
    for (int i = 1; i <= n; i++)
    {
        int dl, dr;
        int hl, hr;
        // 初始落点
        dl = dr = 0;
        // 初始高度
        hl = hr = 0;
        for (int j = 1; j <= n; j++)
        {
            // 左边缘落下
            if (p[j].l < p[i].l && p[i].l < p[j].r && p[j].h < p[i].h)
            {
                // 如果有两个平台的高度相同且都可以被落到的话,那么会落到编号靠前的那个平台。
                if (p[j].h > hl || (p[j].h == hl && (!dl || dl > j)))
                {
                    dl = j;
                    hl = p[j].h;
                }
            }
            // 右边缘落下
            if (p[j].l < p[i].r && p[i].r < p[j].r && p[j].h < p[i].h)
            {
                // 如果有两个平台的高度相同且都可以被落到的话,那么会落到编号靠前的那个平台。
                if (p[j].h > hr || (p[j].h == hr && (!dr || dr > j)))
                {
                    dr = j;
                    hr = p[j].h;
                }
            }
        }
        cout << dl << " " << dr << endl;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用GPU虚拟化技术搭建支持3D设计的职校学生机房(云教室)

背景 学校为职业学校&#xff0c;计算机教室需要进行Maya、Adobe Illustrator、Adobe Dreamweaver、Adobe PhotoShop等软件的教学。每个教室为35用户。资源需求为4核、8G内存、80G硬盘。 基于桌面虚拟化VDI技术的机房在成本、可管理性方面&#xff0c;相对于传统胖终端的机房…

004微信小程序云开发API数据库-插入记录-删除记录-更新记录

文章目录 1.微信小程序云开发API数据库-插入记录案例代码 2.微信小程序云开发API数据库-删除记录案例代码 3.微信小程序云开发API数据库-更新记录案例代码 1.微信小程序云开发API数据库-插入记录 微信小程序云开发API数据库是一个方便快捷的数据库解决方案&#xff0c;可以让开…

lv4 嵌入式开发-1 Linux文件IO

目录 1 文件的概念和类型 2 如何理解标准IO 3 流(FILE)的含义 3.1 流 3.2 文本流和二进制流 3.3 流的缓冲类型 4 小结 5 缓存区实验 1 文件的概念和类型 概念&#xff1a;一组相关数据的有序集合 文件类型&#xff1a; 常规文件 r 目录文件 d 字符设备文件 …

电力社区电力故障,潜在风险如何避免?

在现代社会中&#xff0c;电力已经成为我们日常生活不可或缺的一部分。它驱动着我们的家庭设备、照明系统、电子设备和许多其他关键基础设施。然而&#xff0c;电力的可靠性和安全性对于确保我们的住宅社区运行顺畅至关重要。 在这个背景下&#xff0c;配电柜监控成为了一个至关…

Python项目打包与部署(三):打包与部署的实际操作流程

其它章节 Python项目打包与部署(一)&#xff1a;模块与包的概念与关系Python项目打包与部署(二): init.py的作用及内容各类Python项目的项目结构及代码组织最佳实践 在实际项目开发过程中&#xff0c;标准化的项目打包与部署流程&#xff0c;对于开源项目&#xff0c;可以帮助你…

[移动通讯]【Carrier Aggregation-4】【LTE-2】

前言&#xff1a; 参考&#xff1a; 4G/LTE - LTE Advanced 参考&#xff1a; 《Carrier Aggregation Explained In 101 Seconds》 Qualcomm 《Carrier aggregation (CA) in LTE-Advanced by TELCOMA Global》 《Carrier Aggregation _CA_Part1》 《Carrier Aggregation _CA_Pa…

手动开发-简单的Spring基于XML配置的程序--源码解析

手动开发-简单的Spring基于XML配置的程序 文章目录 手动开发-简单的Spring基于XML配置的程序思路分析完整代码&&#xff1a; 本文带着大家写一个简单的Spring容器&#xff0c;通过读取beans.xml配置文件&#xff0c;获取第一个JavaBean&#xff1a;Monster的对象&#xff0…

光源控制器光源亮度调节操作说明

光源控制器光源亮度调节操作说明 光源亮度的调节在许多应用中都扮演着至关重要的角色&#xff0c;不仅影响图像质量&#xff0c;还能改善工作环境。下面是关于光源控制器光源亮度调节的详细操作步骤&#xff0c;帮助您轻松实现亮度的合适调整。 步骤一&#xff1a;登录系统 …

MySQL——常见问题

NULL和空值的区别 1、空值不占空间&#xff0c;NULL值占空间。当字段不为NULL时&#xff0c;也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时&#xff0c;只能查出字段中没有不为NULL的或者为 NULL 的&#xff0c;不能查出空值。 3、判断NULL 用IS NULL 或者 is no…

Bootstrap与响应式图片设计相关的类

01-图像随父元素的同步缩放 可以利用类 .img-fluid 实现图像随父元素同步缩放。 示例代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>图像的同步缩放</title><meta name"viewport&…

C/C++标准输入输出函数最全解析(含C/C++的输出控制符)

C/C标准输入输出函数最全解析&#xff08;含C/C的输出控制符&#xff09; 一、标准输入流1、C 标准输入1.1 标准输入流及对缓冲区的理解1.2 scanf()1.2.1 scanf()简介1.2.2 ANSI C中scanf()的转换说明1.2. 3 scanf()转换说明中的修饰符 1.3 gets() - 不建议1.4 fgets()1.5 fget…

【笔记】大模型时代下做科研的四个思路 - 论文精读·52

视频地址&#xff1a;大模型时代下做科研的四个思路 相关大模型 CV: ViT(22B) , ViT-G(2B) from google 多模态&#xff1a;ViT-E(4B) from google NLP&#xff1a;LLaMA(70B,130B,330B,651B) from Meta 提问&#xff1a;在模型越来越大的时代背景下&#xff0c;如何利用有限…

【接口测试】微信小程序接口自动化的实现方案

背景 前几天看到有人问微信小程序怎么进行接口自动化&#xff0c;所以想把自己如何进行微信小程序接口自动化的方法分享下。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html这是微信小程序的登陆流程&#xff0c;小程序登陆需要在小程序…

un-app-手机号授权登录-授权框弹不出情况

前言 手机号授权是获取用户信息api停用之后&#xff0c;经常使用的api。但是此api也是有很多坑 手机号授权会出现调用不起来的情况&#xff0c;这是因为小程序后台没有进行微信认证导致的 手机号授权调用不起来-没有微信认证 来到小程序后台-设置-基本设置-下拉找到微信认证…

【ModelSim】查看波形图(Wave)和数据流图(DataFlow),以4-bit计数器为例

▚ 00 预备条件 &#x1f4e2; 本项目包括两个Verilog文件&#xff1a;测试文件counter.v和激励文件testbench.v&#xff1b;可从此处点击HERE获取。 &#x1f3ae; Windows10系统 &#x1f52e; ModelSim SE-64 2020.4 ▚ 01 启动ModelSim 有两种方式可以打开ModelSim&a…

vue下载与部分指令详解

目录 vue 下载地址 前端框架 MVC与MVVM框架 Vue使用 Vue.js指令 ​编辑 v-if v-else v-show v-on v-model&#xff08;表单绑定&#xff09; v-bind v-for v-text v-model 指令扩展 vue 下载地址 官方入门&#xff1a;https://cn.vuejs.org/ API 文档&#…

如何给网站或者后端服务免费且快速的进行配置HTTPS,配置ssl证书

前言 现在部署的网站用的大多都是https协议的,还有的平台你要是想发布自己的网站就必须得是https的协议,如果不使用ssl的话,那就不让你使用.就比如微信,支付宝等的产品,不用的话就不让你使用他们的平台.不过还好很多服务厂商都提供了免费ssl证书可以进行配置 今天的情况比较特殊…

常用电子元器件基础知识

目录 一、电阻 二、电容 三、电感 四、保险丝 五、二极管 一、电阻 概念&#xff1a;顾名思义&#xff0c;就是增加电流通过的阻力的。 就像是在水渠中放入东西&#xff0c;能阻止水的顺利通过也是一个道理。 基于电阻的电气特性&#xff0c;电阻在电路中主要有以下四个…

Solidity 小白教程:11. 构造函数和修饰器

Solidity 小白教程&#xff1a;11. 构造函数和修饰器 这一讲&#xff0c;我们将用合约权限控制&#xff08;Ownable&#xff09;的例子介绍solidity语言中构造函数&#xff08;constructor&#xff09;和独有的修饰器&#xff08;modifier&#xff09;。 构造函数 构造函数&…

栈与队列(JAVA)

单调栈&#xff1a; 下一个更大元素。 题目意思如图所示&#xff1a; 单调栈图解&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer>stacknew Stack<>();int res[]new int[nums2.length];int ans[]new int…