POJ 1434 二分

来源:互联网 发布:创维25nd9000总线数据 编辑:程序博客网 时间:2024/05/29 13:20

题意:给出离地高度b,和水箱的长宽高,给出水的容积,问装完水有多高。

二分高度,裸二分。

#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct cistern{    double b,h,w,d;} data[50005];int n,t;double getans(double h){    double sum=0;    for(int i=0; i<n; i++)        if(h>data[i].b)            sum+=h>data[i].b+data[i].h?data[i].h*data[i].w*data[i].d:data[i].w*data[i].d*(h-data[i].b);    return sum;}int main(){    double sum,ans,h;    scanf("%d",&t);    while(t--)    {        sum=h=0;        scanf("%d",&n);        for(int i=0; i<n; i++)            scanf("%lf%lf%lf%lf",&data[i].b,&data[i].h,&data[i].w,&data[i].d),            sum+=data[i].h*data[i].w*data[i].d,                 h=max(h,data[i].b+data[i].h);        scanf("%lf",&ans);        if(ans>sum)        {            puts("OVERFLOW");            continue;        }        double l=0,r=h,mid;        while(l<=r)        {            mid=(l+r)/2.0;            double x1=getans(mid),x2=getans(mid-1e-4);            if(x1>=ans&&x2<ans)                break;            else if(x1<ans)                l=mid+1e-4;            else                r=mid-1e-4;        }        printf("%.2f\n",mid);    }    return 0;}


原创粉丝点击