#25655: 測試為ac 但提交卻為na


wujintai010313@gmail.com (武晋泰)

學校 : 不指定學校
編號 : 153853
來源 : [61.221.4.122]
最後登入時間 :
2022-06-10 00:10:44
a480. 導彈攔截系統 -- 100學年度彰雲嘉區資訊學科能力競賽 | From: [61.221.57.66] | 發表日期 : 2021-06-09 20:34

import math

 

#定义Node节点

class Node():

    def __init__(self, city):

        #到第一座导弹系统的距离

        self.t1 = 0

        #到第二座导弹系统的距离

        self.t2 = 0

 

#输入第一座导弹的坐标位置

# s1 = input("输入整数x1 , y1,代表第一座导弹拦截系统的座标位置:")

s1 = input()

#以点为参考,切割

l1 = s1.split(" ")

#将坐标转换成列表

l1 = [int(i) for i in l1]

#输入第二座导弹的坐标位置

# s2 = input("输入整数x2 , y2,代表第二座导弹拦截系统的座标位置:")

s2 = input()

#以点为参考,切割

l2 = s2.split(" ")

#将坐标转换成列表

l2 = [int(j) for j in l2]

#输入城市的个数

# n = int(input("请输入城市个数:"))

n = int(input())

#用来存储城市的坐标

cities_lo = []

#循环输入城市个数,并以","分割,存在cities_to中

for city in range(n):

    # n1 = input("输入城市坐标:")

    n1 = input()

    l3 = n1.split(" ")

    l3 = [int(k) for k in l3]

    cities_lo.append(l3)

# print(cities_lo)

#将每个城市分别转换成Node节点

cities_loNode = []

for citylo in cities_lo:

    #转换成Node节点

    cit = Node(citylo)

    #计算到第一座导弹系统的距离

    cit.t1 = math.sqrt((citylo[0] - l1[0]) ** 2 + (citylo[1] - l1[1]) ** 2)

    #计算到第二座导弹系统的距离

    cit.t2 = math.sqrt((citylo[0] - l2[0]) ** 2 + (citylo[1] - l2[1]) ** 2)

    #添加到存储结构中

    cities_loNode.append(cit)

# print(cities_loNode)

#求取每个城市到导弹系统的最小距离,并以列表的形式存储再cities_to_min中

cities_lo_min = [min(cite.t1, cite.t2) for cite in cities_loNode]

#求取每个城市到导弹系统的最大距离,并以列表的形式存储再max_to中

max_lo = [max(cite.t1, cite.t2) for cite in cities_loNode]

#以升序的形式排序

max_lo.sort()

#剔除最大值,为接下来的判别提供条件

max_lo = max_lo[:-1]

# print("max", max_lo)

# print(cities_lo_min)

#最小值列表排序

cities_lo_min.sort()

# print(cities_lo_min)

#判别,如果最小值列表中的最大值,大于所有最大值列表中的元素

#说明,此最小值可以覆盖所有城市

if cities_lo_min[-1] >= max(max_lo):

    energy = int(cities_lo_min[-1] ** 2)

#否则,至少有一个城市没有覆盖到,还需加上最小值

else:

    energy = int(cities_lo_min[0] ** 2 + cities_lo_min[-1] ** 2)

#最终输出消耗的最小能源

# print("消耗的最小能源为:", energy)

print(energy)

 

請大家幫忙指點

 
ZeroJudge Forum