아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

풍선

시간 제한1초메모리 제한128 MB

요약
두 방 A와 B에서 각 팀에 필요한 풍선을 배정해 이동 거리의 합이 최소가 되도록 한다.
난이도

보통10점 중 5점

유형
그리디, 정렬
정답자
아직 제출이 없습니다

문제

프로그래밍 대회에서 문제를 푼 팀은 풍선을 받는다. 풍선은 사람이 직접 달아 주어야 하므로 자원봉사자가 필요하다.

풍선은 방 AA와 방 BB에 나누어 보관되어 있다. 대회에 참가한 팀은 모두 NN개이며, 각 팀의 자리는 서로 다르다. 어떤 팀은 방 AA에, 어떤 팀은 방 BB에 더 가깝다.

각 팀에게 달아 주어야 하는 풍선의 개수와, 방 AA 및 방 BB로부터의 거리가 주어진다. 이때 모든 풍선을 달아 주는 데 필요한 이동 거리의 최솟값을 구하라. 봉사자는 매우 많고, 한 팀에는 같은 색 풍선 여러 개를 달아 준다고 가정한다. 풍선 하나를 달기 위해 이동해야 하는 거리는 그 풍선을 가져온 방으로부터 팀까지의 거리와 같다. 봉사자는 한 번에 풍선 한 개만 들고 이동할 수 있다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 팀의 수 NN (1≤N≤10001 \le N \le 1000)과, 방 AA 및 방 BB에 보관된 풍선의 수 AA, BB (0≤A,B≤100000 \le A, B \le 10000)가 주어진다.

다음 NN개의 줄에는 각 팀에 달아 주어야 하는 풍선의 수 KK와, 방 AA로부터의 거리 DAD_A, 방 BB로부터의 거리 DBD_B (0≤DA,DB≤10000 \le D_A, D_B \le 1000)가 주어진다. 풍선이 부족한 경우는 없다. 즉, 각 테스트 케이스에서 ∑Ki≤A+B\sum K_i \le A + B이다.

입력의 마지막 줄에는 00이 세 개 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 모든 팀에게 풍선을 달아 주기 위해 필요한 이동 거리의 최솟값을 한 줄에 하나씩 출력한다. 풍선을 달아 준 뒤 방 AA나 BB로 돌아오는 거리는 포함하지 않는다. 즉, 방에서 팀으로 이동하는 거리만 계산한다.

예제2

  1. 예제 1

    입력
    3 15 35
    10 20 10
    10 10 30
    10 40 10
    0 0 0
    
    예상 출력
    300
    
  2. 예제 2

    입력
    1 5 0
    5 3 7
    0 0 0
    
    예상 출력
    15