首页 > 编程语言 >Python实现:两个朋友的最大共同行走距离

Python实现:两个朋友的最大共同行走距离

时间:2025-01-12 23:29:16浏览次数:3  
标签:路径 商店 Python 电影院 距离 Alan 行走 Bob

问题背景

Alan和Bob是住在城市中的两个邻居,他们的城市里只有三栋建筑:电影院、商店和他们的家。一天,他们一起去看电影,看完后他们决定继续讨论电影,但由于各自有不同的任务,他们的路径有所不同。Bob打算直接回家,而Alan则需要先去商店,再回家。

在离开电影院后,他们决定一起走一段路,讨论电影。然后他们在某个点分开,Alan继续去商店,而Bob直接回家。我们的任务是计算他们两人能一起走的最大距离,保证两人走的总距离不超过他们各自的最大容忍值。

题目描述

给定:

  • 两个参数t1t2,分别表示Alan和Bob最多可以在各自的最短路径上多走的最大距离。
  • 电影院、房子和商店的坐标。

要求计算Alan和Bob能够共同走的最大距离。

输入格式

  1. 第一行输入两个整数 t1t2,分别表示Alan和Bob在其最短路径上可以额外走的最大距离。
  2. 第二行输入电影院的坐标 (cx, cy)
  3. 第三行输入房子的坐标 (hx, hy)
  4. 第四行输入商店的坐标 (sx, sy)

输出格式

输出一个浮点数,表示Alan和Bob共同走的最大距离,保留至少四位小数。

解题思路

1. 欧几里得距离

首先,我们需要计算三个地点之间的欧几里得距离。欧几里得距离公式为:

d=(x2−x1)2+(y2−y1)2d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}

在本题中,我们需要计算以下几条距离:

  • cinema -> house(Bob的最短路径)
  • cinema -> shop(Alan的起点到商店的路径)
  • shop -> house(Alan的路径的一部分)

2. 路径和容忍值

  • Alan的路径:从电影院到商店再到房子,总距离为 cinema -> shop -> house
  • Bob的路径:从电影院直接到房子,总距离为 cinema -> house

3. 最大共同路径

假设Alan和Bob从电影院一起走了一段距离 d。根据题意,Alan和Bob的行走距离不能超过他们的最大容忍值:

  • Alan的路径不能比最短路径多走超过t1
  • Bob的路径不能比最短路径多走超过t2

因此,我们的目标是计算Alan和Bob能够共同走的最大距离,确保两人都不超过各自的最大行走限制。

4. 解决方案

  • 计算从电影院到商店、从电影院到房子、从商店到房子的距离。
  • 分别计算Alan和Bob各自的最大可行路径。
  • 找到共同走的最大距离,并输出。

Python代码实现

import math

# 计算两点之间的欧几里得距离
def distance(x1, y1, x2, y2):
    return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)

def solve():
    # 读取输入
    t1, t2 = map(int, input().split())
    cx, cy = map(int, input().split())  # 电影院坐标
    hx, hy = map(int, input().split())  # 房子坐标
    sx, sy = map(int, input().split())  # 商店坐标
    
    # 计算各个路径的距离
    d_ch = distance(cx, cy, hx, hy)  # 电影院到房子的距离
    d_cs = distance(cx, cy, sx, sy)  # 电影院到商店的距离
    d_sh = distance(sx, sy, hx, hy)  # 商店到房子的距离
    
    # Alan的最大行走距离是:电影院 -> 商店 -> 房子
    max_alan_dist = d_cs + d_sh
    
    # Bob的最大行走距离是:电影院 -> 房子
    max_bob_dist = d_ch
    
    # 最大共同走的距离
    # Alan最多可以多走t1,Bob最多可以多走t2
    max_together_dist = min(d_cs + t1, d_ch + t2)
    
    # 共同走的最大距离是两者之间的最小值
    result = min(max_alan_dist, max_bob_dist, max_together_dist)
    
    # 输出结果,保留10位小数
    print(f"{result:.10f}")

代码解析

  1. distance函数:计算两点之间的欧几里得距离。输入为两点的坐标 (x1, y1)(x2, y2),输出为两点之间的直线距离。

  2. 输入读取:通过map(int, input().split())来读取输入,并将其转换为整数。包括t1t2、电影院、商店和房子的坐标。

  3. 计算路径长度

    • d_ch:电影院到房子的最短距离。
    • d_cs:电影院到商店的距离。
    • d_sh:商店到房子的距离。
  4. 最大可行的共同路径计算

    • 计算max_alan_dist:Alan的路径是从电影院到商店再到房子的总距离。
    • 计算max_bob_dist:Bob的路径是从电影院直接到房子的总距离。
    • 计算max_together_dist:这是Alan和Bob可以共同走的最大距离,考虑到各自的最大容忍值t1t2
  5. 输出结果:最后输出最小的共同走距离,保留到小数点后10位。

时间和空间复杂度分析

  • 时间复杂度:计算距离的时间复杂度为常数,因为我们只需要计算三条距离。整体时间复杂度为 O(1)O(1)。
  • 空间复杂度:仅使用了几个变量来存储计算的结果,空间复杂度为 O(1)O(1)。

示例分析

示例 1

输入

0 2
0 0
4 0
-3 0

计算

  • 从电影院到房子的最短距离:d_ch = 4.0
  • 从电影院到商店的距离:d_cs = 3.0
  • 从商店到房子的距离:d_sh = 7.0
  • 最大可行的共同路径 max_together_dist = min(d_cs + t1, d_ch + t2) = min(3.0 + 0, 4.0 + 2) = 3.0

输出

1.0000000000

示例 2

输入

0 0
0 0
2 0
1 0

计算

  • 从电影院到房子的最短距离:d_ch = 2.0
  • 从电影院到商店的距离:d_cs = 1.0
  • 从商店到房子的距离:d_sh = 1.0
  • 最大可行的共同路径 max_together_dist = min(d_cs + t1, d_ch + t2) = min(1.0 + 0, 2.0 + 0) = 1.0

输出

2.0000000000

总结

本文详细介绍了如何利用Python计算两个朋友能够共同走的最大距离。通过欧几里得距离公式,我们计算了电影院、商店和房子之间的距离,并考虑了Alan和Bob各自的最大容忍值,最终计算出了他们能够共同走的最大距离。通过合理的算法设计,我们确保了问题能够在给定的时间和空间限制内高效解决。

标签:路径,商店,Python,电影院,距离,Alan,行走,Bob
From: https://blog.csdn.net/2403_89537385/article/details/145102048

相关文章

  • Python在生成式AI驱动的电影特效中的作用
    文章目录引言一、生成式AI在电影特效中的应用1.1生成式AI简介1.2生成式AI在电影特效中的角色二、Python的优势及其在生成式AI中的应用2.1Python的生态系统2.2Python在生成式AI中的应用三、虚拟角色生成3.1虚拟角色生成的挑战3.2利用GAN生成虚拟角色四、场景重建......
  • Python与大语言模型的透明度与可解释性研究
    文章目录一、透明度与可解释性的重要性二、Python在大语言模型透明度与可解释性中的应用2.1LIME(LocalInterpretableModel-agnosticExplanations)2.2SHAP(SHapleyAdditiveexPlanations)2.3Captum2.4ELI5三、提升大语言模型透明度与可解释性的策略3.1模型可视化3.2......
  • 如何用Python实现大语言模型的公平性优化
    在当今的人工智能领域,大语言模型(LLMs)如GPT-3、BERT等已经展示了其在自然语言处理任务中的强大能力。然而,随着这些模型的应用范围不断扩大,其潜在的公平性问题也日益凸显。公平性问题可能表现为模型在处理不同性别、种族、文化背景等敏感属性时的偏见。因此,如何优化大语言模型......
  • python安装
    3.9.6在RedHat7.6系统上编译和安装Python3.9.6,你可以按照以下步骤操作:步骤:1.安装必要的依赖项sudoyumgroupinstall-y"DevelopmentTools"(没有不装)sudoyuminstall-yzlib-develncurses-develgdbm-develnss-developenssl-develreadline-develsqlite-devel......
  • 跟我一起学 Python 数据处理(三十五):数据获取与存储的关键要点
    跟我一起学Python数据处理(三十五):数据获取与存储的关键要点在数据处理的领域中,我们不断探索前行,今天的目标是深入了解数据获取与存储方面的知识,希望能与大家共同提升这方面的技能,一起在数据处理的道路上迈出坚实的步伐。一、文章写作初衷在数据的世界里,获取高质量、可靠......
  • 跟我一起学 Python 数据处理(三十四):进阶文件类型处理与技巧
    跟我一起学Python数据处理(三十四):进阶文件类型处理与技巧在数据的海洋中,我们常常会遇到各种各样的文件类型,而Python作为强大的数据处理工具,能够帮助我们应对诸多挑战。今天,我们继续深入学习Python数据处理的相关知识,希望能与大家共同进步,更好地掌握数据处理的技能。......
  • 【AI中数学-线代-综合实例-包括python实现】 聚焦注意力:解析GPT等大模型中的注意力机
    第三章线性代数--综合实例第11节聚焦注意力:解析GPT等大模型中的注意力机制在人工智能的众多技术中,注意力机制(AttentionMechanism)无疑是推动大规模模型如GPT(GenerativePre-trainedTransformer)取得突破性进展的关键因素之一。本节将通过五个实际应用案例,深入解析注意力机......
  • Python函数
    在Python编程中,函数是构建程序的关键模块,它允许将复杂的任务分解为可管理、可重复使用的代码片段,极大地提高了代码的可读性、可维护性和可扩展性。以下为函数的详细内容:函数的定义与基本结构定义方式使用def关键字来定义函数,其基本语法结构为:deffunction_name(parame......
  • 2025 年 1 月 TIOBE 指数,一月头条:Python 是 TIOBE 2024 年度编程语言!
    2025年1月TIOBE指数一月头条:Python是TIOBE2024年度编程语言!编程语言Python赢得了“TIOBE2024年度编程语言”称号。该奖项授予一年内评级增幅最高的编程语言。Python在2024年增长了9.3%。这远远领先于其竞争对手:Java+2.3%、JavaScript+1.4%和Go+1.2%。......
  • Python AI教程之十八:监督学习之决策树(9) 决策树模型中的过度拟合
    决策树模型中的过度拟合在机器学习中,决策树是一种常用的预测工具。然而,使用这些模型时遇到的一个常见问题是过度拟合。在这里,我们探讨决策树中的过度拟合以及应对这一挑战的方法。决策树为什么会出现过度拟合?决策树模型中的过度拟合是指决策树变得过于复杂,并捕获训练数......