📆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) (1kn1000)
    第二行包括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 105xi105, 105yi105

  • 输出格式
    输出一个实数表示结果

  • 样例输入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=(y2y1)2+(x2x1)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语言上均有一定的基础😜😜😜


欢迎您的点赞👍+收藏🎁+关注❤ 😁😁😁
Logo

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

更多推荐