备战蓝桥杯Day31 - 真题-管道

news2024/11/16 11:57:18

题目描述

 解题思路

这个问题可以视为一个水波在管道中传播的问题,其中水波以单位速度传播。阀门在 S 时刻打开,水流以单位速度流向管道的右侧,每个传感器位于每段管道的中心。对于位于 Li 的阀门,在 Ti 时刻打开时,水波会在 Ti - S 时刻到达第 Li 段,并继续向右传播。

我们需要找到这样一个时刻,使得所有的传感器都检测到水流。由于水波是以单位速度传播的,我们可以按照阀门打开的时刻和水波传播的距离来计算每个传感器检测到水流的时刻。最早所有传感器都检测到水流的时刻,就是最后一个传感器检测到水流的时刻。

大佬题解

我觉得他这个代码思路非常清晰,而且跟我的思路一模一样,不过我写不出。

import os
import sys

# 请在此输入您的代码

# import time


def check(Ti, values, Len):
    """
    逐步缩小时间,寻找满足所有管道都能检测到水流时的最小时刻
    :param Ti:管道中每一段中间的传感器都能检测到有水流的时间
    :param values:最初打开的阀门与打开时刻点
    :param Len:管道长度
    :return:True or False
    """
    # 存储通过已打开的阀门,在Ti时刻能检测到水流的管道段
    section = []

    # 遍历每个已打开的阀门,计算并存入能检测到水流的管道段
    for Li, Si in values:
        if Ti >= Si:
            section.append((Li - (Ti - Si), Li + (Ti - Si)))

    # 将管道段按左边界升序排序
    section.sort()

    # 如果没有管道段或者第一个管道段的左边界大于1,即此Ti无法满足所有管道段都能检测到水流,上一个Ti为最小所求时间
    if not section or section[0][0] > 1:
        return False

    # 初始化最大右边界为第一个管道段的右边界
    right_boundary = section[0][1]

    # 遍历管道段,合并相邻的管道段
    for i in range(1, len(section)):
        if section[i][0] - right_boundary <= 1:  # 将管道段的左值与最大右边界比较
            right_boundary = max(right_boundary, section[i][1])  # 差值不大于1则更新最大右边界
        else:
            break

    # 如果最终的右边界大于等于管道长度,返回True,否则返回False
    return right_boundary >= Len


def main():
    # 输入已开启阀门数,管道总长度
    n, Len = map(int, input().split())
    # 输入阀门编号与开启时间
    values = [list(map(int, input().split())) for _ in range(n)]

    # start_time = time.perf_counter()

    # 初始化二分查找的左右边界
    left, right = 0, 10 ** 9

    # 二分查找
    while left < right:
        mid = (left + right) // 2
        if check(mid, values, Len):
            right = mid
        else:
            left = mid + 1

    # 输出结果
    print(left)

    # end_time = time.perf_counter()
    # print(f'用时{(end_time - start_time) * 1000}毫秒')


if __name__ == '__main__':
    main()

 我的解题过程

根据题目我画出了示意图,弄清楚题目中给出字母所代表的意思,根据题目中给出的输入数据和输出数据,我大致明白题目的意思,明白人应该怎么解题,但是在实现代码上能力还不太够。还是需要看大佬怎么写出代码的。

明白题目的意思和思路后解题其实不难,主要是写代码要多练和多运用。题目中用到二分查找,我知道二分查找的算法,但是不知道什么时候要运用这个算法,怎么运用。我再多练习练习,看我能不能自己写出来吧。

菜就多练!

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

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

相关文章

Stripe Android 购买集成

图片丢了来这里看&#xff1a;https://juejin.cn/post/7347220605610541091 1. 准备事项 Stripe 账号域名以及配套的网站Stripe 账号付款信息公钥和私钥配置产品以及价格 这些步骤可以看这篇&#xff1a;Stripe Web 购买集成 3. 分析一下流程 客户端集成和 Web 端集成有挺…

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…

8年测试总结,自动化测试必要注意点+自动化测试框架(汇总)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、开始自动化测试…

win修改图标自定义QQ桌面图标

当安装了TIM后&#xff0c;想把图标改成QQ 图标见顶部&#xff0c;或通过网盘下载 提取码&#xff1a;9Ayc 操作步骤&#xff1a; 1.桌面右键图标&#xff0c;点击属性 2.选择快捷方式-更改图标 3.浏览选择下载的ico图标即可

2024最新阿里云幻兽帕鲁搭建服务器_Palworld联机多人游戏

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

Python装饰器:如何访问和设置私有属性?

大家好&#xff0c;今天我和大家聊一聊如何使用装饰器来访问和设置私有属性。 你有没有遇到过这样的场景&#xff1a;你有一个对象&#xff0c;它的属性是私有的&#xff0c;你想要在不影响原有代码的情况下&#xff0c;对这些私有属性进行操作。这时候&#xff0c;装饰器就派…

【JAVA】Servlet开发

目录 HttpServlet HttpServletRequest HttpServletResponse 错误页面 设置网页自动刷新时间 构造重定向相应 js发起http请求 服务器端对js发起的http请求进行处理 前端获取后端数据&#xff0c;添加到当前页面的末尾&#xff0c;代码示例&#xff1a; 前后端交互&…

微信小程序 nodejs+vue+uninapp学生在线选课作业管理系统

基于微信小程序的班级作业管理助手使用的是MySQL数据库&#xff0c;nodejs语言和IDEA以及微信开发者工具作为开发工具&#xff0c;这些技术和工具我在日常的作业中都经常的使用&#xff0c;并且因为对编程感兴趣&#xff0c;在闲暇时间也进行的进行编程的提高&#xff0c;所以在…

Leet code 1658 将x减到0的最小操作数

解题思路&#xff1a;滑动窗口 主要思想&#xff1a;正难逆简 题目需要左找一个数 右找一个数 我们不如直接找中间最长的一连串子数让这串子树和为 数组子树和减去X 找不到就返回 -1 滑动窗口双指针从左端出发&#xff0c;进行 进窗口 判断 出窗口 更新结果四个步骤 代码…

bugreport中查看开发者选项动画时长缩放日志

首先打开开发者选项&#xff0c;抓取一份bugreport解压后找到bugreport-机型-时间点.zip文件&#xff0c;然后再解压此文件 解压后进入该文件&#xff0c;找到bugreport-机型-时间点.txt文件 打开此文件&#xff0c;搜索“animator_duration_scale”关键字&#xff0c;找到图片…

9成省份“鸿蒙化”,它真起来了?

自去年9月华为宣布鸿蒙原生应用全面启动以来&#xff0c;鸿蒙正以不可阻挡之势&#xff0c;快速在全国千行百业的移动应用领域推进。不仅有支付宝、快手、淘宝、京东等超200家头部互联网企业加入鸿蒙生态&#xff1b;2024年以来&#xff0c;上海、浙江、广西等多省市政务民生、…

1.中医学习-总论

目录 1.为什么要学中医 2.什么是中医 介绍 中医例子1&#xff1a; 中医例子2: 中医最高境界“大道至简” 中医讲究的是本质 中医核心&#xff1a;阴阳、表里、寒热、虚实 ​编辑医不叩门 3.阴阳 1.一天中的阴阳 2.一年中的阴阳 3.阴阳之间的关系 4.阴阳四季的变化 …

【vue elementUI】修改el-dropdown样式

实现效果如下&#xff1a; 代码如下&#xff1a; <el-dropdown trigger"click" command"handleCommand" active-text-color"#606266"><span class"product-card">{{getCategoryName(categoryId)}}</span><el-dro…

基于SpringBoot和Vue的图书个性化推荐系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的图书个性化推荐系统。 &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f495;个人简介&#xff1a;混迹在java圈十年有余&#xff0c;擅长Java、微信小程序、Python、Android等&#xff0c;大家有这一块的…

代码随想录算法训练营第day29|491.递增子序列、 46.全排列、 47.全排列 II

目录 491.递增子序列 46.全排列 47.全排列 II 491.递增子序列 力扣题目链接 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7,…

Avalon总线学习

Avalon总线学习 avalon总线可以分为&#xff1a; Avalon clock interface Avalon reset interface Avalon Memory mapped interface Avalon iterrupt interface Avalon streaming interface Avalon tri-state conduit interface Avalon conduit interface 1、Avalon c…

【LeetCode热题100】206. 反转链表(链表)

一.题目要求 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2…

【系统架构设计师】软件架构设计 02

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 02 软件架构设计 文章目录 系统架构设计师 - 系列文章目录 文章目录 前言 一、软件架构的概念 ★★★ 二、基于架构的软件开发 ★★★★ 三、软件架构风格 ★★★★ 1.数据流风格 2.调用/返回风格 3.独立构件风格…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图&#xff0c;主要功能为 1、编写一个serviceSms短信服务类&#xff1b; 2、需要用到短信的地方统一调用基建层的服务即可&#xff1b; 3、可以随意切换、增加短信厂商&#xff0c;不需要更改场景代码&#xff0c;只需要更改application.yml 里面…

搜索二叉树迭代和递归的两种*简单*实现方式

判断搜索二叉树 概念 一棵树所有结点的左节点小于父节点&#xff0c;右节点大于父节点&#xff0c;则为搜索二叉树。 迭代方法 中序遍历二叉树&#xff0c;如果总是升序则是搜索二叉树。如果存在降序&#xff0c;那肯定不是搜索二叉树。 Coding checkTreeOrder()方法 boo…