【算法题解】Berland 路标限速问题(Follow Traffic Rules)

问题描述

在 Berland 城市,有一条连接首都 Berland 和奥林匹克城市 Bercouvert 的公路。为了改善交通管理,这条路上设立了一个限速标志,限制某一段路程的最大速度。在通过这个标志之后,车辆可以恢复到任意速度。我们需要计算,Berland 的普通汽车以最优的速度完成整个路程所需的最短时间。

已知条件:

  1. 车辆的最大加速度为 aa km/h²,最大速度为 vv km/h。
  2. 公路全长为 ll 公里,其中限速标志位于起点 dd 公里的位置,限速为 ww km/h。
  3. 车辆在起点时速度为 0 km/h,最终要到达终点。

要求:

计算车辆从起点到终点的最短时间,结果保留至少 5 位小数。


输入格式:

第一行输入两个整数 aa 和 vv:

  • aa 表示车辆最大加速度 1≤a≤100001 \leq a \leq 10000;
  • vv 表示车辆最大速度 1≤v≤100001 \leq v \leq 10000。

第二行输入三个整数 l,d,wl, d, w:

  • ll 为公路总长度 2≤l≤100002 \leq l \leq 10000;
  • dd 为限速标志距离 1≤d<l1 \leq d < l;
  • ww 为限速标志的速度 1≤w≤100001 \leq w \leq 10000。

输出格式:

输出从起点到终点的最短时间,保留至少 5 位小数。


样例输入:

示例 1

1 1
2 1 3

输出

2.5000000000

示例 2

5 70
200 170 40

输出

8.9658746953

解题思路

  1. 基本情况分析

    • 如果限速 ww 大于或等于车辆的最大速度 vv,则限速标志的存在对行车无影响,我们只需要按照最大速度 vv 进行加速、匀速行驶和减速即可。
    • 如果限速 ww 小于最大速度 vv,则需要分段计算,分别处理以下几个阶段:
      1. 从起点到限速标志前,加速到限速速度 ww 或最大速度(以较小值为准)。
      2. 通过限速标志区域,以限速速度 ww 行驶。
      3. 限速区域之后到终点,加速到最大速度 vv 或直接减速。
  2. 分段计算公式

    • 根据匀加速公式 v2=u2+2asv^2 = u^2 + 2as,可以计算加速阶段所需时间和距离;
    • 匀速阶段的时间为 t=s/vt = s / v;
    • 总时间为三段时间的累加。

代码实现

以下是完整的 Python 实现代码:

import math# 函数:计算最短时间
def minimum_time(a, v, l, d, w):# 情况 1:限速大于等于最大速度if w >= v:# 加速到最大速度并匀速行驶t1 = math.sqrt(2 * l / a)if t1 * a <= v:  # 不需要减速return t1else:accel_time = v / aremaining_distance = l - 0.5 * v * v / areturn accel_time + remaining_distance / v# 情况 2:有限速区域# 第一阶段:加速到限速速度或最大速度t_accel_to_w = math.sqrt(2 * d / a)if t_accel_to_w * a > w:  # 速度不能超过限速t_accel_to_w = w / adist_accel_to_w = 0.5 * w * w / aelse:dist_accel_to_w = d# 第二阶段:限速区域内匀速行驶dist_in_zone = max(0, d - dist_accel_to_w)t_in_zone = dist_in_zone / w# 第三阶段:通过限速区域后继续行驶t_decel_to_w = math.sqrt(2 * (l - d) / a)if t_decel_to_w * a > w:  # 如果需要减速t_decel_to_w = w / adist_decel_to_w = 0.5 * w * w / aelse:dist_decel_to_w = l - d# 返回总时间return t_accel_to_w + t_in_zone + t_decel_to_w# 输入数据
a, v = map(int, input().split())
l, d, w = map(int, input().split())# 计算最短时间
result = minimum_time(a, v, l, d, w)# 输出结果,保留 10 位小数
print(f"{result:.10f}")

样例测试

测试用例 1:

输入

1 1
2 1 3

输出

2.5000000000

测试用例 2:

输入

5 70
200 170 40

输出

8.9658746953

代码解析

  1. 输入处理

    • 第一行输入最大加速度 aa 和最大速度 vv;
    • 第二行输入道路总长度 ll、限速标志位置 dd、限速速度 ww。
  2. 分段逻辑

    • 通过加速公式、匀速公式、减速公式逐步计算时间;
    • 使用条件判断来处理特殊情况(如速度达到限速时的距离判断)。
  3. 输出格式

    • 使用 Python 的浮点数格式化功能,确保输出结果精确到至少 10 位小数。

总结

本题考察了物理运动学和算法分段处理的结合。通过严格的逻辑推导和分段计算,可以有效地解决复杂的运动路径最优时间问题。

关键词:数学建模、匀加速运动、分段计算、Python 实现


直接复制代码运行即可,欢迎在评论区讨论其他解法或优化思路! 😊

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

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

相关文章

VLMs之Gemma 2:PaliGemma 2的简介、安装和使用方法、案例应用之详细攻略

VLMs之Gemma 2&#xff1a;PaliGemma 2的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年12月4日&#xff0c;PaliGemma 2是一个基于Gemma 2系列语言模型的开源视觉语言模型 (VLM) 家族。PaliGemma 2 通过提供一个规模化、多功能且开源的VLM家族&#xff0c;…

24.12.26 SpringMVCDay01

SpringMVC 也被称为SpringWeb Spring提供的Web框架,是在Servlet基础上,构建的框架 SpringMVC看成是一个特殊的Servlet,由Spring来编写的Servlet 搭建 引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc<…

国产 HighGo 数据库企业版安装与配置指南

国产 HighGo 数据库企业版安装与配置指南 1. 下载安装包 访问 HighGo 官方网站&#xff08;https://www.highgo.com/&#xff09;&#xff0c;选择并下载企业版安装包。 2. 上传安装包到服务器 将下载的安装包上传至服务器&#xff0c;并执行以下命令&#xff1a; [rootmas…

Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(上)

一、背景 本文我们以某商城的商品检索为例,说一说如何使用属性及选项,实现复杂的逻辑表达式的查询。 先贴图,总结出业务需求。 可以通过一系列属性及选项的组合,过滤出用户想要的商品列表。 1、属性 上文中的品牌、分类、屏幕尺寸、CPU型号、运行内存、机身内存、屏幕材…

机器学习(二)-简单线性回归

文章目录 1. 简单线性回归理论2. python通过简单线性回归预测房价2.1 预测数据2.2导入标准库2.3 导入数据2.4 划分数据集2.5 导入线性回归模块2.6 对测试集进行预测2.7 计算均方误差 J2.8 计算参数 w0、w12.9 可视化训练集拟合结果2.10 可视化测试集拟合结果2.11 保存模型2.12 …

WHAT KAN I SAY?Kolmogorov-Arnold Network (KAN)网络结构介绍及实战(文末送书)

一、KAN网络介绍 1.1 Kolmogorov-Arnold Network (KAN)网络结构的提出 2024年4月&#xff0c;来自MIT、加州理工学院、东北大学等团队的研究&#xff0c;引爆了一整个科技圈&#xff1a;Yes We KAN&#xff01; 这种创新方法挑战了多层感知器(Multilayer Perceptron&#xff…

YOLO11改进-模块-引入星型运算Star Blocks

当前网络设计中&#xff0c;“星型运算”&#xff08;逐元素乘法&#xff09;的应用原理未被充分探究&#xff0c;潜力有待挖掘。为解决此问题&#xff0c;我们引入 Star Blocks&#xff0c;其内部由 DW - Conv、BN、ReLU 等模块经星型运算连接&#xff0c;各模块有特定参数。同…

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖&#xff0c;前往 官网下载 pcre2依赖下载&#xff0c;前往Git下载 zlib依赖下载&#xff0c;前往Git下载 下载完成后完整的包如下&#xff1a; 如果网速下载不到请使用网盘下载 通过网盘分享的文件…

【理解机器学习中的过拟合与欠拟合】

在机器学习中&#xff0c;模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示&#xff0c;详细解析过拟合与欠拟合现象&#xff0c;并提出应对策略。主要内容如下&#xff1a; 什么是过拟合和欠拟合&#xff1f; 如何防止过拟合和欠拟…

【婚庆摄影小程序设计与实现】

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

12.26 学习卷积神经网路(CNN)

完全是基于下面这个博客来进行学习的&#xff0c;感谢&#xff01; ​​【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别_pytorch cnn-CSDN博客 基于深度神经网络DNN实现的手写数字识别&#xff0c;将灰度图像转换后的二维数组展平到一维&#xff0c;…

Unity URP多光源支持,多光源阴影投射,多光源阴影接收(优化版)

目录 前言&#xff1a; 一、属性 二、SubShader 三、ForwardLitPass 定义Tags 声明变体 声明变量 定义结构体 顶点Shader 片元Shader 四、全代码 四、添加官方的LitShader代码 五、全代码 六、效果图 七、结语 前言&#xff1a; 哈喽啊&#xff0c;我又来啦。这…

如何使用React,透传各类组件能力/属性?

在23年的时候&#xff0c;我主要使用的框架还是Vue&#xff0c;当时写了一篇“如何二次封装一个Vue3组件库&#xff1f;”的文章&#xff0c;里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后&#xff0c;我发现这种扩展组件能力的方式有一个专门的术语&am…

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾&#xff1a;高度&#xff08;也称深度&#xff09; 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…

分析排名靠前的一些自媒体平台,如何运用这些平台?

众所周知&#xff0c;现在做网站越来越难了&#xff0c;主要的原因还是因为流量红利时代过去了。并且搜索引擎都在给自己的平台做闭环改造。搜索引擎的流量扶持太低了。如百度投资知乎&#xff0c;给知乎带来很多流量扶持&#xff0c;也为自身内容不足做一个填补。 而我们站长…

2024大模型在软件开发中的具体应用有哪些?(附实践资料合集)

大模型在软件开发中的具体应用非常广泛&#xff0c;以下是一些主要的应用领域&#xff1a; 自动化代码生成与智能编程助手&#xff1a; AI大模型能够根据开发者的自然语言描述自动生成代码&#xff0c;减少手动编写代码的工作量。例如&#xff0c;GitHub Copilot工具就是利用AI…

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机&#xff0c; vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式&#xff1b;nat模式&#xff1b;host模式 一、桥接模式 所谓桥接模式&#xff0c;也就是虚拟机与宿主机处于同一个网段&#xff0c; 宿主机…

3.系统学习-熵与决策树

熵与决策树 前言1.从数学开始信息量(Information Content / Shannon information)信息熵(Information Entropy)条件熵信息增益 决策树认识2.基于信息增益的ID3决策树3.C4.5决策树算法C4.5决策树算法的介绍决策树C4.5算法的不足与思考 4. CART 树基尼指数&#xff08;基尼不纯度…

SpringBoot + HttpSession 自定义生成sessionId

SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中&#xff0c;由于默认ID是通过UUID创建的&#xff0c;缺乏足够的安全性&#xff0c;决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下&#xff1a; HttpSe…

破解海外业务困局:新加坡服务器托管与跨境组网策略

在当今全球化商业蓬勃发展的浪潮之下&#xff0c;众多企业将目光投向海外市场&#xff0c;力求拓展业务版图、抢占发展先机。而新加坡&#xff0c;凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境&#xff0c;已然成为企业海外布局的热门之选。此时&#xf…