#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const double pi = acos(-1.0);
const double eps = 1e-10;
struct circle
{
double h, r;
void input()
{
scanf("%lf%lf", &h, &r);
h -= r;
}
double calc(double tmp)
{
double d = max(0.0, tmp - h);
d = min(2 * r, d);
return pi * (r * d * d - d * d * d / 3);
}
} c[maxn];
struct cube
{
double h, a, b, c;
void input()
{
scanf("%lf%lf%lf%lf", &h, &a, &b, &c);
h -= c / 2;
}
double calc(double tmp)
{
double d = max(0.0, tmp - h);
d = min(d, c);
return a * b * d;
}
} s[maxn];
double w, l, v;
int n, m, T;
int dcmp(double a)
{
if (fabs(a) <= eps) return 0;
if (a < 0) return -1;
return 1;
}
double check(double height)
{
double tot = w * l * height;
for (int i = 0; i < n; i++)
tot -= s[i].calc(height);
for (int i = 0; i < m; i++)
tot -= c[i].calc(height);
return tot + eps >= v;
}
int main(int argc, char const *argv[])
{
scanf("%d", &T);
while (T--)
{
scanf("%lf%lf%lf%d%d", &w, &l, &v, &n, &m);
for (int i = 0; i < n; i++)
s[i].input();
for (int i = 0; i < m; i++)
c[i].input();
double l = 0, r = 10000000000.0;
while (l + eps < r)
{
double mid = (l + r) / 2.0;
if (check(mid)) r = mid;
else l = mid;
}
printf("%.6lf\n", r);
}
return 0;
}
有一个无穷高的长方体,里面有一些球和小的长方体,然后往大的长方体里面倒水,水只能填充到间隙里面,问水能填多高。 告诉的有 ,水的体积,大的长方体的长和宽,以及每个小的长方体的中心的高度,及它的长宽高,和球的中心的高度以及球的半径。
球缺的体积为:V=πH^2(R-H/3)
二分答案即可。