26072 곰곰이와 시소

정민용·2023년 2월 11일

백준

목록 보기
43/286

문제



곰곰이는 NN개의 치킨들을 커다란 시소 위에 올려놓아 보관하고 있다. 이 시소의 길이는 LL이다.

ii번째 치킨은 wiw_i의 무게를 가졌고, 시소의 왼쪽 끝에서 xix_i만큼 떨어진 위치에 놓여 있다.

시소의 균형이 무너지면 치킨이 바닥에 떨어지기 때문에, 곰곰이는 받침점의 위치를 적절히 옮겨서 시소를 평행하게 하고 싶다.

시소를 평행하게 만드는 받침점의 위치를 구해보자! (시소의 무게는 치킨의 무게에 비해 무시해도 될 정도로 가볍다.)

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 곰곰이와 시소

0개의 댓글