题解 | 三角谜题
三角谜题
https://www.nowcoder.com/practice/b3545e9409cd4a39a09a4629003d2293
import sys
import math
# 计算底为d,腰为y的等腰三角形的面积
def calS(y,d):
S = d * 0.5 * math.sqrt(y * y - d * d * 0.25)
return S
# 要固定底边找最大合法腰,不能固定腰找底(面积非单调)
def judgeS(ston):
max_area = 0
ston_y = [x for x in ston if x[1]>=2]
for ls2 in ston:
d , cnt_d = ls2
for ls1 in ston_y:
y, cnt_y = ls1
if d >= 2*y:
continue
if d!=y or (d==y and cnt_d>2):
S = calS(y,d)
max_area = S if S>max_area else max_area
break
return max_area
# print(calS(6,5))
data = list(map(int,sys.stdin.read().split()))
T = data[0]
ptr = 1
for i in range(T):
n = data[ptr]
ston = {}
ptr+=1
for j in range(n):
lj = data[ptr]
ptr+=1
aj = data[ptr]
ptr+=1
ston[lj]=ston.get(lj, 0) + aj
ston = sorted(ston.items(),key = lambda x:-x[0])
# print(ston_y)
res = judgeS(ston)
if res:
print(res)
else:
print('-1')
要固定底边找最大合法腰,不能固定腰找底(面积非单调)
查看18道真题和解析