POJ 1434 Fill the Cisterns!(计算几何,二分)
2012-08-13 23:55
429 查看
一些不同高度的水箱组成连通器,求装下V体积液体时液面的高度
将水箱按底部高排序。然后二分液面高度就可以了
将水箱按底部高排序。然后二分液面高度就可以了
//Memory: 1744 KB //Time: 1391 MS #include <stdio.h> #include <algorithm> using namespace std; struct cistern { __int64 b,h,s; __int64 v; };cistern c[50004]; bool cmp(cistern a,cistern b) { return a.b<b.b; } int main() { int cas; __int64 vol; scanf("%d",&cas); while(cas--) { int i,n; __int64 w,d; double sum=0,mid,low,high=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%I64d%I64d%I64d%I64d",&c[i].b,&c[i].h,&w,&d); c[i].s=w*d; c[i].v=c[i].s*c[i].h; high=max(high,(double)(c[i].b+c[i].h)); sum+=c[i].v; } scanf("%I64d",&vol); if(vol>sum) { printf("OVERFLOW\n"); continue; } sort(c,c+n,cmp); low=c[0].b; while(high-low>0.0001) { sum=0; mid=(high+low)/2; for(i=0;i<n;i++) { if(mid>=c[i].b+c[i].h) sum+=c[i].v; else if(mid>c[i].b) sum+=(mid-c[i].b)*c[i].s; if(mid<c[i].b) break; } if(sum>=vol) high=mid; if(sum<vol) low=mid; } printf("%.2lf\n",mid); } return 0; }
相关文章推荐
- poj 1434 --Fill the Cisterns!(计算几何,二分)
- POJ 1434 Fill the Cisterns!(二分)
- POJ 1434 Fill the Cisterns!(二分)
- POJ 1434 Fill the Cisterns!(二分)
- POJ 1434 Fill the Cisterns! (模拟 or 二分)
- poj 1434 Fill the Cisterns! (二分)
- POJ 1434 Fill the Cisterns!
- poj1434 Fill the Cisterns!
- POJ_1434_Fill the Cisterns!
- poj 1434 Fill the Cisterns!(扫描线)
- POJ 1434 Fill the Cisterns
- POJ 1434 Fill the Cisterns! 笔记
- POJ 1434 Fill the Cisterns!
- POJ-1905-Expanding Rods【二分】【计算几何】
- POJ 2318 TOYS(计算几何)(二分)
- POJ 1873 The Fortified Forest (计算几何,枚举+凸包)
- POJ 2242 The Circumference of the Circle (计算几何)
- POJ 2318 TOYS (计算几何,向量积,二分查找)
- poj 2507 crossed ladders(计算几何,二分)
- 【POJ】2318 TOYS ——计算几何+二分