n = int(input)lamps = for _ in range(n):parts = list(map(int, input.split))lamp_id = parts[0]x1, y1, x2, y2 = parts[1], parts[2], parts[3], parts[4]height = y2 - y1lamps.append((lamp_id, x1, y1, x2, y2, height))result = remaining_lamps = lamps.copywhile remaining_lamps:# 选择基准灯:y1最小的灯base_lamp = min(remaining_lamps, key=lambda lamp: lamp[2])base_y1 = base_lamp[2]base_height = base_lamp[5]max_y_diff = base_height / 2# 找出同一行的灯same_row = for lamp in remaining_lamps:y_diff = abs(lamp[2] - base_y1)if y_diff摘要:n = int(input)lamps = for _ in range(n):parts = list(map(int, input.split))lamp_id = parts[0]x1, y1, x2, y2 = parts[1], parts[2],
解决思路
1、输入处理:读取N个灯的编号和坐标信息。
2、排序过程:
每次从剩余的灯中选择y1最小的灯作为基准灯。找出所有与基准灯同一行的灯(高度偏差 ≤ 灯高度一半)。将这些灯按x1从小到大排序。将这些灯的编号加入结果列表,并从剩余灯中移除。重复上述过程,直到所有灯都被排序。3、输出结果:按顺序输出编号。
来源:爱科技一族