가장 안정적인 물 높이
시간 제한1초메모리 제한128 MB
반지름과 두께가 수식으로 주어진 회전체 형태의 컵에서, 유리와 물을 합친 무게중심이 가장 낮아지는 물의 높이를 구해야 하는 문제로 수식 파싱, 적분, 수치 최적화가 필요합니다.
문제
물이 담긴 유리컵은 가득 찼을 때도, 완전히 비었을 때도 아닌, 그 중간 어딘가에서 가장 안정적입니다. 가득 찬 컵은 살짝만 건드려도 쉽게 넘어져 내용물을 쏟고, 빈 컵은 가벼워서 역시 쉽게 넘어집니다. 이 문제에서는 컵을 가능한 한 가장 안정적으로 만드는 물의 높이를 찾아야 합니다.
안정성은 컵의 무게중심 높이로 판단합니다. 무게중심이 낮을수록 컵은 더 안정적입니다. 무게중심은 유리와 물을 이루는 아주 많은 작은 입자들의 위치를 질량으로 가중 평균한 지점입니다. 유리는 물보다 약 배 무거우므로, 같은 크기의 물 입자에 비해 유리 입자의 질량은 배입니다.
모든 컵은 수직축을 중심으로 한 회전체이지만, 반지름은 높이에 따라 달라질 수 있고 유리의 두께도 일정하지 않을 수 있습니다. 컵은 다음으로 기술됩니다.
- 높이 ;
- 유리로 꽉 찬 바닥(밑판)의 두께 ;
- 높이 에서의 바깥 반지름을 주는 함수 ;
- 높이 에서의 유리 두께를 주는 함수 .
높이 는 컵의 바닥에서부터 잰 값입니다. 부터 까지는 유리로 꽉 찬 밑판이고, 부터 까지는 유리가 벽을 이룹니다. 이 벽의 바깥 반지름은 , 안쪽 반지름은 이며, 두께 는 항상 수평 방향으로 잽니다. 컵에 부은 물은 유리 밑판 위에 고여 안쪽의 빈 공간을 채웁니다.
입력
입력에는 여러 개의 컵 정보가 들어 있습니다. 각 컵은 세 줄로 주어집니다.
- 첫째 줄: 컵의 높이 와 밑판 두께 (두 수, );
- 둘째 줄: 바깥 반지름 식 ;
- 셋째 줄: 유리 두께 식 .
모든 값의 단위는 센티미터입니다. 컵 정보들의 끝은 두 개의 0으로 이루어진 줄로 표시되며, 이 줄은 처리하지 않습니다.
각 식에는 숫자 0-9, 소수점(.), 네 가지 연산자 +, -, *, /, 괄호, 그리고 소문자 x(바닥에서부터 잰 높이)만 나타납니다. 연산자는 일반적인 의미와 우선순위를 가지며, *와 /가 +와 -보다 먼저 계산됩니다.
함수는 다음을 만족합니다.
- 인 모든 에 대해 ;
- 인 모든 에 대해 .
출력
각 컵마다 정확히 다음 형식으로 한 줄을 출력합니다.
Pour L litres / W cm of water.
여기서 은 컵을 가장 안정적으로 만들기 위해 부어야 하는 물의 양(리터)이고, 는 그때의 물 높이, 즉 컵 안쪽 바닥(유리 밑판의 윗면) 위로 채워진 물기둥의 높이(센티미터)입니다. 비어 있을 때 가장 안정적이라면 두 값 모두 0.000을 출력합니다.
과 는 소수점 아래 정확히 세 자리로 반올림하여 출력합니다. 모든 테스트 데이터는 과 의 정확한 값이 반올림 경계에 놓이지 않도록 선택되므로, 반올림한 출력값은 유일하게 정해집니다.