유아용 풀

시간 제한5초메모리 제한512 MB

요약
각 수원을 켜고 끄는 시점을 정해 정확히 V리터의 물을 목표 온도 X에 맞춰 가장 짧은 시간에 받습니다.
난이도

보통10점 중 7점

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

문제

유아용 풀은 물을 담아 어린아이가 놀 수 있게 만든 큰 통이다.

서로 다른 수원 NN개를 쓸 수 있다. ii번째 수원은 온도가 CiC_i인 물을 초당 RiR_i리터씩 내보낸다. 처음에는 모든 수원이 꺼져 있다. 각 수원은 한 번만 켤 수 있고 한 번만 끌 수 있으며, 켜거나 끄는 데 드는 시간은 없다. 여러 수원을 동시에 켜 둘 수 있다.

풀에는 물을 얼마든지 담을 수 있지만, 부피가 정확히 VV이고 온도가 정확히 XX인 물을 최대한 빨리 받으려고 한다. 수원을 최적으로 켜고 끌 때, 목표를 이루는 데 걸리는 최소 시간은 몇 초인가? 모든 수원을 다 쓸 필요는 없다.

이 문제에서 부피가 V0V_0이고 온도가 X0X_0인 물과 부피가 V1V_1이고 온도가 X1X_1인 물을 합치면 즉시 부피가 V0+V1V_0 + V_1이고 온도가 (V0X0+V1X1)/(V0+V1)(V_0 X_0 + V_1 X_1) / (V_0 + V_1)인 물이 된다. 예를 들어 10도인 물 5리터와 40도인 물 10리터를 합치면 30도인 물 15리터가 된다. 물은 다른 물과 섞일 때를 빼면 시간이 지나도 데워지거나 식지 않는다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 줄에는 정수 NN과 실수 VV, XX가 공백으로 구분되어 주어진다. 다음 NN개의 줄에는 ii번째 수원의 유량 RiR_i와 온도 CiC_i가 공백으로 구분되어 주어진다. 부피의 단위는 리터, 유량의 단위는 초당 리터, 온도의 단위는 섭씨이다.

모든 실수는 소수점 아래 넷째 자리까지 정확히 주어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤1001 \le N \le 100
  • 0.0001≤V≤10000.00.0001 \le V \le 10000.0
  • 0.1≤X≤99.90.1 \le X \le 99.9
  • 0.0001≤Ri≤10000.00.0001 \le R_i \le 10000.0
  • 0.1≤Ci≤99.90.1 \le C_i \le 99.9
  • 답이 존재하는 테스트 케이스에서 답은 항상 10610^6보다 작다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 풀을 목표 부피와 목표 온도로 채우는 데 걸리는 최소 시간(초)이다. 주어진 입력으로 목표를 이룰 수 없으면 yy 자리에 IMPOSSIBLE을 출력한다.

yy는 소수점 아래 일곱째 자리에서 반올림해 소수점 아래 여섯째 자리까지 출력하며, 마지막이 0이더라도 여섯 자리를 모두 적는다. 모든 테스트 데이터에서 정답은 반올림 경계에서 충분히 떨어져 있으므로, 배정밀도 실수 연산으로 계산해도 출력 값은 달라지지 않는다.

힌트

첫 번째 예제 테스트 케이스에서는 하나뿐인 수원의 온도가 목표 온도와 같다. 바로 켜서 물이 10리터가 될 때까지 두는 것이 최적이고, 초당 0.2리터가 나오므로 50초가 걸린다.

두 번째 예제 테스트 케이스에서는 첫 번째 수원을 약 207221.843687초 동안 켜 두고, 끝나기 약 0.092778초 전에 두 번째 수원도 함께 켜는 방법이 최적이다.

세 번째 예제 테스트 케이스에서는 두 수원 모두 목표 온도보다 차갑기 때문에 목표 온도에 도달할 방법이 없다.

예제1

  1. 예제 1

    입력
    6
    1 10.0000 50.0000
    0.2000 50.0000
    2 30.0000 65.4321
    0.0001 50.0000
    100.0000 99.9000
    2 5.0000 99.9000
    30.0000 99.8999
    20.0000 99.7000
    2 0.0001 77.2831
    0.0001 97.3911
    0.0001 57.1751
    2 100.0000 75.6127
    70.0263 75.6127
    27.0364 27.7990
    4 5000.0000 75.0000
    10.0000 30.0000
    20.0000 50.0000
    300.0000 95.0000
    40.0000 2.0000
    
    예상 출력
    Case #1: 50.000000
    Case #2: 207221.843687
    Case #3: IMPOSSIBLE
    Case #4: 0.500000
    Case #5: 1.428035
    Case #6: 18.975332