每日一练-光源距离最近
python每日一练,计算机图论、距离问题、距离最值问题
📆Date: 2023年1月2日
🎬Author: 小 y 同 学
📃Classify: 蓝桥杯每日一练
🔖Language: Python
🍀题目描述
题意
给出n个人在平面XOY上的位置,其中的k个人具有光源,现问所有人离光源最近的距离的最大值是多少,与标准答案的误差不超过10-5即可 。输入格式
第一行包括两个正整数n,k ( 1 ≤ k ≤ n ≤ 1000 ) (1\le k\le n\le 1000) (1≤k≤n≤1000)
第二行包括k个正整数,表示第ai个人具有光源
接下来n行每行包括两个整数xi和yi,表示第i个人的坐标位置,且
− 1 0 5 ≤ x i ≤ 1 0 5 , − 1 0 5 ≤ y i ≤ 1 0 5 -10^5\le x_i \le 10^5,\ -10^5\le y_i \le 10^5 −105≤xi≤105, −105≤yi≤105输出格式
输出一个实数表示结果样例输入1
4 2 2 3 0 0 0 1 1 2 2 0
- 样例输出1
2.23606797749978969
- 样例输入2
2 1 2 -100000 -100000 100000 100000
- 样例输出2
282842.712474619009
- 样例输入3
8 3 2 6 8 -17683 17993 93038 47074 58079 -57520 -41515 -89802 -72739 68805 24324 -73073 71049 72103 47863 19268
- 样例输出3
130379.280458974768
🌿解题思路
- 常规思路解题
题目梳理
题目的大致意思就是平面上会有光源点和非光源点,我们需要做的就是计算每个非光源点到所有光源点的距离的最小值,然后再从这些最小值中找出最大值即可。
数据输入
n和k的值直接一行输入n, k = map(int, input().split())
此处要注意input输入的数据类型默认为字符串类型,我们需要强制转换为int类型;然后将第几个人有光源存入一个列表k_li = list(map(int, input().split()))
此处要注意是从1开始计数的;最后利用for循环输入每个人的数据(详情见源码)
核心处理
根据距离公式 s = ( y 2 − y 1 ) 2 + ( x 2 − x 1 ) 2 s=\sqrt{(y_2-y_1)^2+(x_2-x_1)^2} s=(y2−y1)2+(x2−x1)2,我们可以根据s2的最值情况可以判断s的最值情况(能少算一点儿就少算一点儿);然后我们将非光源点作为外层循环,寻找每个非光源点至光源点的最小值存入一个列表,随后对这个列表的最大值开根号打印输出即可。
🌸Python源码
# _*_coding:utf-8_*_ # created by cy on 2023/1/2 import math # 距离的平方 def s(x1, y1, x2, y2, ): return (y2 - y1) ** 2 + (x2 - x1) ** 2 def solve(): n, k = map(int, input().split()) k_li = list(map(int, input().split())) # 具有光源的人,下标1开始 a_li = [] # 光源坐标 una_li = [] # 非光源坐标 s2_li = [] # 距离平方 # 坐标输入 for j in range(n): xy = list(map(int, input().split())) if j + 1 in k_li: a_li.append(xy) else: una_li.append(xy) # print(a_li, una_li) # 依次求最小值 for j in una_li: tem = [] for l in a_li: s1 = s(j[0], j[1], l[0], l[1]) tem.append(s1) s2_li.append(min(tem)) # 求最小值中的最大值并且开根号 s2_li_max = max(s2_li) print(math.sqrt(s2_li_max)) if __name__ == "__main__": solve()
📧Summary
小y的今日一练到此画上了句号,小y觉得此题一定有更好的解决方法,欢迎友友们多给建议🌼🌼🌼
有兴趣一起学习编程的小伙伴可以私聊小y一起学习,小y在Python,c/c++和matlab语言上均有一定的基础😜😜😜

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)