Blocks&Balls
시간 제한2초메모리 제한512 MB
용기 안에 고정된 직육면체와 공이 있을 때, 물의 부피 v가 채워지는 수면 높이를 구한다.
문제
무중력 상태인 우주 정거장에서 아이가 Blocks&Balls라는 장난감을 가지고 논다. 이 장난감은 직육면체 통 하나와 그 안에 떠 있는 작은 직육면체 블록 여러 개, 공 여러 개로 이루어진다. 중력이 없으니 블록과 공은 바닥으로 가라앉지 않고 놓인 자리에 그대로 있다.
아이는 통에 물을 부으면 수면이 어느 높이까지 올라오는지 궁금해한다. 우주에서는 물이 바닥부터 차오르지 않아 직접 해 볼 수는 없지만, 계산으로는 구할 수 있다.
통의 밑면은 가로가 , 세로가 인 직사각형이고 높이는 무한하다. 밑면의 높이를 으로 둔다. 블록은 모든 면이 통의 면과 평행한 직육면체다. 중심의 높이가 , 가로가 , 세로가 , 높이가 인 블록은 높이 부터 까지를 차지하고, 수평으로 자른 단면의 넓이는 다. 공은 중심의 높이가 , 반지름이 이다.
부피가 인 물을 붓는다. 물은 바닥부터 차오르고 블록과 공은 제자리에 고정되어 있어서, 수면 아래에 잠긴 부분만큼 물이 들어갈 공간을 차지한다. 즉 수위 는 높이 부터 까지의 부피에서 블록과 공이 그 구간에서 차지한 부피를 뺀 값이 정확히 가 되는 높이다. 이 를 구해 출력하라.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. ()
각 테스트 케이스의 첫째 줄에는 실수 , , 와 정수 , 이 주어진다. 차례로 통의 가로, 통의 세로, 붓는 물의 부피, 블록의 개수, 공의 개수다. (, , )
다음 개 줄에는 블록마다 실수 , , , 가 주어진다. 차례로 블록 중심의 높이, 가로, 세로, 높이다. (, , , , )
다음 개 줄에는 공마다 실수 , 가 주어진다. 차례로 공 중심의 높이와 반지름이다. (, , )
모든 실수는 소수점 아래 여섯째 자리를 넘지 않는다. 입력은 항상 올바르다. 어떤 두 물체도 서로 겹치지 않고, 모든 물체는 통 안에 들어간다. 모든 테스트 케이스의 을 더한 값은 이하다.
출력
각 테스트 케이스마다 수위를 한 줄에 출력한다. 소수점 아래 일곱째 자리에서 반올림해 여섯째 자리까지, 자리를 모두 채워서 쓴다. 답이 정확히 이면 3.000000을 출력한다.
조건을 만족하는 가 여러 개이면 그중 가장 작은 값을 출력한다. 수위는 을 넘지 않고, 정확한 수위와 이웃한 두 배수의 중점 사이의 거리는 항상 이상이므로 반올림한 값은 하나로 정해진다.