문제

곰곰이는 N개의 치킨들을 커다란 시소 위에 올려놓아 보관하고 있다. 이 시소의 길이는 L이다.
i번째 치킨은 wi의 무게를 가졌고, 시소의 왼쪽 끝에서 xi만큼 떨어진 위치에 놓여 있다.
시소의 균형이 무너지면 치킨이 바닥에 떨어지기 때문에, 곰곰이는 받침점의 위치를 적절히 옮겨서 시소를 평행하게 하고 싶다.
시소를 평행하게 만드는 받침점의 위치를 구해보자! (시소의 무게는 치킨의 무게에 비해 무시해도 될 정도로 가볍다.)
import sys
input = lambda: sys.stdin.readline().strip()
global n, l
n, l = map(int, input().split())
array_x = list(map(int, input().split()))
array_w = list(map(int, input().split()))
def count(x, w, len):
sum = w * abs(len - x)
return sum
def binary_search(arr_x, arr_w, start, end):
result, last_result = 0, 0
global n
while start <= end:
mid = (start + end) / 2
left, right = 0, 0
for i in range(n):
c = count(arr_x[i], arr_w[i], mid)
if arr_x[i] > mid:
right += c
else:
left += c
result = mid
result_c = int(result * 10000000) / 10000000
last_result_c = int(last_result * 10000000) / 10000000
if left == right or result_c == last_result_c:
return result_c
elif left < right:
start = mid + 0.00000001
last_result = mid
else:
end = mid - 0.00000001
last_result = mid
return result
print(binary_search(array_x, array_w, 0, l + 1))
백준 26072 곰곰이와 시소