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