만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Blocks&Balls

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

요약
용기 안에 고정된 직육면체와 공이 있을 때, 물의 부피 v가 채워지는 수면 높이를 구한다.
난이도

보통10점 중 7점

유형
이분 탐색, 기하, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

무중력 상태인 우주 정거장에서 아이가 Blocks&Balls라는 장난감을 가지고 논다. 이 장난감은 직육면체 통 하나와 그 안에 떠 있는 작은 직육면체 블록 여러 개, 공 여러 개로 이루어진다. 중력이 없으니 블록과 공은 바닥으로 가라앉지 않고 놓인 자리에 그대로 있다.

아이는 통에 물을 부으면 수면이 어느 높이까지 올라오는지 궁금해한다. 우주에서는 물이 바닥부터 차오르지 않아 직접 해 볼 수는 없지만, 계산으로는 구할 수 있다.

통의 밑면은 가로가 ww, 세로가 ll인 직사각형이고 높이는 무한하다. 밑면의 높이를 00으로 둔다. 블록은 모든 면이 통의 면과 평행한 직육면체다. 중심의 높이가 zz, 가로가 aa, 세로가 bb, 높이가 cc인 블록은 높이 z−c/2z - c/2부터 z+c/2z + c/2까지를 차지하고, 수평으로 자른 단면의 넓이는 a×ba \times b다. 공은 중심의 높이가 zz, 반지름이 rr이다.

부피가 vv인 물을 붓는다. 물은 바닥부터 차오르고 블록과 공은 제자리에 고정되어 있어서, 수면 아래에 잠긴 부분만큼 물이 들어갈 공간을 차지한다. 즉 수위 hh는 높이 00부터 hh까지의 부피에서 블록과 공이 그 구간에서 차지한 부피를 뺀 값이 정확히 vv가 되는 높이다. 이 hh를 구해 출력하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤201 \le T \le 20)

각 테스트 케이스의 첫째 줄에는 실수 ww, ll, vv와 정수 mm, nn이 주어진다. 차례로 통의 가로, 통의 세로, 붓는 물의 부피, 블록의 개수, 공의 개수다. (0<w,l≤10000 < w, l \le 1000, 0<v≤10120 < v \le 10^{12}, 1≤m,n≤100 0001 \le m, n \le 100\,000)

다음 mm개 줄에는 블록마다 실수 zz, aa, bb, cc가 주어진다. 차례로 블록 중심의 높이, 가로, 세로, 높이다. (0<a≤w0 < a \le w, 0<b≤l0 < b \le l, 0<c0 < c, z−c/2≥0z - c/2 \ge 0, z+c/2≤100 000z + c/2 \le 100\,000)

다음 nn개 줄에는 공마다 실수 zz, rr가 주어진다. 차례로 공 중심의 높이와 반지름이다. (0<2r≤min⁡(w,l)0 < 2r \le \min(w, l), z−r≥0z - r \ge 0, z+r≤100 000z + r \le 100\,000)

모든 실수는 소수점 아래 여섯째 자리를 넘지 않는다. 입력은 항상 올바르다. 어떤 두 물체도 서로 겹치지 않고, 모든 물체는 통 안에 들어간다. 모든 테스트 케이스의 m+nm + n을 더한 값은 200 000200\,000 이하다.

출력

각 테스트 케이스마다 수위를 한 줄에 출력한다. 소수점 아래 일곱째 자리에서 반올림해 여섯째 자리까지, 자리를 모두 채워서 쓴다. 답이 정확히 33이면 3.000000을 출력한다.

조건을 만족하는 hh가 여러 개이면 그중 가장 작은 값을 출력한다. 수위는 10610^6을 넘지 않고, 정확한 수위와 이웃한 두 10−610^{-6} 배수의 중점 사이의 거리는 항상 10−710^{-7} 이상이므로 반올림한 값은 하나로 정해진다.

예제2

  1. 예제 1

    입력
    1
    1 1 1 1 1
    1.5 0.2 0.3 0.4
    0.5 0.5
    
    예상 출력
    1.537871
    
  2. 예제 2

    입력
    1
    10 20 100 1 1
    50 5 5 4
    80 3
    
    예상 출력
    0.500000