가장 안정적인 물 높이

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

요약
반지름과 두께가 수식으로 주어진 회전체 형태의 컵에서, 유리와 물을 합친 무게중심이 가장 낮아지는 물의 높이를 구해야 하는 문제로 수식 파싱, 적분, 수치 최적화가 필요합니다.
난이도

보통10점 중 7점

유형
수학, 이분 탐색, 기하, 시뮬레이션
정답자
아직 제출이 없습니다

문제

물이 담긴 유리컵은 가득 찼을 때도, 완전히 비었을 때도 아닌, 그 중간 어딘가에서 가장 안정적입니다. 가득 찬 컵은 살짝만 건드려도 쉽게 넘어져 내용물을 쏟고, 빈 컵은 가벼워서 역시 쉽게 넘어집니다. 이 문제에서는 컵을 가능한 한 가장 안정적으로 만드는 물의 높이를 찾아야 합니다.

안정성은 컵의 무게중심 높이로 판단합니다. 무게중심이 낮을수록 컵은 더 안정적입니다. 무게중심은 유리와 물을 이루는 아주 많은 작은 입자들의 위치를 질량으로 가중 평균한 지점입니다. 유리는 물보다 약 2.52.5배 무거우므로, 같은 크기의 물 입자에 비해 유리 입자의 질량은 2.52.5배입니다.

모든 컵은 수직축을 중심으로 한 회전체이지만, 반지름은 높이에 따라 달라질 수 있고 유리의 두께도 일정하지 않을 수 있습니다. 컵은 다음으로 기술됩니다.

  • 높이 HH;
  • 유리로 꽉 찬 바닥(밑판)의 두께 BB;
  • 높이 xx에서의 바깥 반지름을 주는 함수 R(x)R(x);
  • 높이 xx에서의 유리 두께를 주는 함수 T(x)T(x).

높이 xx는 컵의 바닥에서부터 잰 값입니다. x=0x = 0부터 x=Bx = B까지는 유리로 꽉 찬 밑판이고, x=Bx = B부터 x=Hx = H까지는 유리가 벽을 이룹니다. 이 벽의 바깥 반지름은 R(x)R(x), 안쪽 반지름은 R(x)−T(x)R(x) - T(x)이며, 두께 T(x)T(x)는 항상 수평 방향으로 잽니다. 컵에 부은 물은 유리 밑판 위에 고여 안쪽의 빈 공간을 채웁니다.

입력

입력에는 여러 개의 컵 정보가 들어 있습니다. 각 컵은 세 줄로 주어집니다.

  • 첫째 줄: 컵의 높이 HH와 밑판 두께 BB (두 수, 0<B<H≤1000 < B < H \le 100);
  • 둘째 줄: 바깥 반지름 식 R(x)R(x);
  • 셋째 줄: 유리 두께 식 T(x)T(x).

모든 값의 단위는 센티미터입니다. 컵 정보들의 끝은 두 개의 0으로 이루어진 줄로 표시되며, 이 줄은 처리하지 않습니다.

각 식에는 숫자 0-9, 소수점(.), 네 가지 연산자 +, -, *, /, 괄호, 그리고 소문자 x(바닥에서부터 잰 높이)만 나타납니다. 연산자는 일반적인 의미와 우선순위를 가지며, *와 /가 +와 -보다 먼저 계산됩니다.

함수는 다음을 만족합니다.

  • 0≤x≤H0 \le x \le H인 모든 xx에 대해 0.1<R(x)≤1000.1 < R(x) \le 100;
  • B≤x≤HB \le x \le H인 모든 xx에 대해 0.1≤T(x)<R(x)0.1 \le T(x) < R(x).

출력

각 컵마다 정확히 다음 형식으로 한 줄을 출력합니다.

Pour L litres / W cm of water.

여기서 LL은 컵을 가장 안정적으로 만들기 위해 부어야 하는 물의 양(리터)이고, WW는 그때의 물 높이, 즉 컵 안쪽 바닥(유리 밑판의 윗면) 위로 채워진 물기둥의 높이(센티미터)입니다. 비어 있을 때 가장 안정적이라면 두 값 모두 0.000을 출력합니다.

LL과 WW는 소수점 아래 정확히 세 자리로 반올림하여 출력합니다. 모든 테스트 데이터는 LL과 WW의 정확한 값이 반올림 경계에 놓이지 않도록 선택되므로, 반올림한 출력값은 유일하게 정해집니다.

예제5

  1. 예제 1

    입력
    9 1
    3+x/6
    17/8-x/8
    10 1
    (x+10)
    10/(x+10)
    0 0
    
    예상 출력
    Pour 0.030 litres / 3.365 cm of water.
    Pour 0.878 litres / 2.193 cm of water.
    
  2. 예제 2

    입력
    20 2
    5
    1
    0 0
    
    예상 출력
    Pour 0.306 litres / 6.083 cm of water.
    
  3. 예제 3

    입력
    13 1
    4+x/13
    2/(1+x/10)
    0 0
    
    예상 출력
    Pour 0.110 litres / 4.633 cm of water.
    
  4. 예제 4

    입력
    30 3
    10-x/10
    2
    0 0
    
    예상 출력
    Pour 1.368 litres / 8.185 cm of water.
    
  5. 예제 5

    입력
    22 2
    4+x/11
    1.2
    0 0
    
    예상 출력
    Pour 0.304 litres / 8.497 cm of water.