📜  门| Sudo GATE 2021的测验|第45章(1)

📅  最后修改于: 2023-12-03 15:12:45.652000             🧑  作者: Mango

门| Sudo GATE 2021的测验|第45章

本次测验是Sudo GATE 2021的第45章,是Sudo算法竞赛的一部分。该竞赛是为了提高程序员的算法和编程技能,同时也是一个很好的学习平台。测验主题是“门”,将要求参赛者设计一个程序,解决以下问题:

给定一个房间和若干个门的位置,找出距离给定点最近的门。

以下是具体的输入和输出要求:

输入:

  1. 第一行包含两个整数n和q,表示门的数量和问题的数量。
  2. 接下来n行每行描述一个门。每行包含两个整数x和y,表示门的坐标。所有坐标都是非负整数,不超过10^9。
  3. 接下来q行每行描述一个问题。每行包含两个整数x和y,表示需要寻找最近门的点的位置。

输出:

  1. 对于每个问题,输出最靠近询问位置的门的编号。门从1开始编号,按照在输入中给出的顺序编号。如果有多个门距离询问位置的距离相同,则输出编号小的那个门。

以下是代码示例,帮助程序员快速理解问题要求和实现思路:

import math

n, q = map(int, input().split())

doors = []
for i in range(n):
    x, y = map(int, input().split())
    doors.append((x, y, i + 1))

for i in range(q):
    x, y = map(int, input().split())
    min_distance = float('inf')
    min_idx = -1
    for j in range(n):
        d = math.sqrt((doors[j][0] - x)**2 + (doors[j][1] - y)**2)
        if d < min_distance:
            min_distance = d
            min_idx = doors[j][2]
    print(min_idx)

上述代码示例使用了 Python 语言,通过输入 n、q、门的坐标和问题的坐标,遍历所有门,计算距离最短的门的编号,并输出。在实际编程过程中,需要注意以下问题:

  1. 注意输入输出格式问题,特别是编号从1开始和多个门距离相同时的编号问题。
  2. 注意计算距离时,可以使用勾股定理或者直接使用内置函数 math.hypot。
  3. 注意时间效率问题。当门的数量较大时,可以考虑将门的坐标进行排序,便于查找。