POJ 1434 Fill the Cisterns!(二分)

来源:互联网 发布:不会英语怎么学编程 编辑:程序博客网 时间:2024/05/22 06:55

题意:给你一些水箱的位置,以及需要装的水的体积,求水线的高度。。如果溢出则输出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;}elseans+=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;elsel=m;}printf("%.2lf\n",(l+r)/2);}}return 0;}


0 0