N개의 방에 풍선을 필요한 개수만큼 갖다 줘야 하고 풍선은 서로 다른 위치에 있는 방 A, B에 있습니다. 이때 각 방에 필요한 만큼의 풍선을 모두 갖다 줄 때 움직여야 하는 최소한의 이동 거리를 구하는 문제입니다.
import sys
import heapq
while True:
N, A, B = map(int, sys.stdin.readline().split())
if N == 0:
break
balloon = [A, B]
dist = [[0, 0] for _ in range(N)]
heap = []
total = 0
for i in range(N):
K, dA, dB = map(int, sys.stdin.readline().split())
dist[i] = [dA, dB]
diff = (dA-dB)**2
heapq.heappush(heap, [-diff, K, i])
while heap:
d, k, idx = heapq.heappop(heap)
biggerB = dist[idx][0] < dist[idx][1]
if balloon[not biggerB] >= k:
balloon[not biggerB] -= k
total += k*dist[idx][not biggerB]
elif balloon[not biggerB] > 0:
k -= balloon[not biggerB]
total += balloon[not biggerB]*dist[idx][not biggerB]
balloon[not biggerB] = 0
total += k*dist[idx][biggerB]
balloon[biggerB] -= k
else:
total += k * dist[idx][biggerB]
balloon[biggerB] -= k
print(total)