题意:给你一些水箱的位置,以及需要装的水的体积,求水线的高度。。如果溢出则输出overflow
水题。。二分就好了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-8;
int t;
int n;
struct sq
{
double high;
double h,s;
}q[1000000];
double v;
double l,r;
double f(double k)
{
double ans=0;
for(int i=0;i<n;i++)
{
if(q[i].high<k)
{
if(q[i].high+q[i].h<=k)
{
ans+=q[i].h*q[i].s;
}
else
ans+=q[i].s*(k-q[i].high);
}
}
return ans;
}
int main()
{
scanf("%d",&t);
while(t--)
{
r=0.0;
l=1000000000.0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
double a,b;
scanf("%lf%lf%lf%lf",&q[i].high,&q[i].h,&a,&b);
q[i].s=a*b;
r=max(r,q[i].h+q[i].high);
l=min(l,q[i].high);
}
scanf("%lf",&v);
if(f(r)<v)
printf("OVERFLOW\n");
else
{
double m;
while(fabs(l-r)>eps)
{
m=(l+r)/2;
if(f(m)>=v)
r=m;
else
l=m;
}
printf("%.2lf\n",(l+r)/2);
}
}
return 0;
}