나의 풀이 :

T = int(input())
for tc in range(1, T + 1):
N = int(input())
line = list(map(int, input().split()))
X = line[:N]
M = line[N:]
ans = []
for i in range(1, N):
low = X[i-1]
high = X[i]
while high - low > 1 / (10**12):
mid = (low + high) / 2
left = right = 0
for i in range(N):
force = M[i] / (mid-X[i])**2
if X[i] < mid:
left += force
else:
right += force
if left < right:
high = mid
else:
low = mid
ans.append(mid)
print('#%s %s' % (tc, ' '.join('%.10f' % f for f in ans)))


한마디 :

이진 탐색으로 오차 범위 아래까지 균형점을 찾아간다.

  1. 김병훈
    2021.02.16 16:21

    많은 도움이 되었습니다 감사합니다!