ZOJ 3913 Bob wants to pour water(二分)
来源:互联网 发布:开淘宝店卖面膜好卖吗 编辑:程序博客网 时间:2024/06/05 10:22
题目链接:
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3913
题目大意:
在一个长宽高分别为l,w,h的房子里,有一些立方体和球。现在往房子里面倒v升水。有些立方体和球漂浮起来,有些沉在水下。现在知道了各个立方体和球的中心高度,问现在房间里面的水位高度。
思路:
二分。
可以对房间里面的水位高度进行二分,然后可以计算出这些立方体和球在水中的体积,然后此刻房间里的总体积减去立方体和球浸入水中的体积以后和倒入的水体积进行比较。如果相等,则就是所求的高度。
这里有一个是求:球体截取一部分的体积V=π*b^2*(r-b/3)。b是截取以后距离球面的距离。
代码:
#include<stdio.h>#include<string.h>#include<math.h>#define PI acos(-1.0)#define eps 0.0000000001struct node{ double z,a,b,c;}p[100005];struct node1{ double z,r;}q[100005];double w,len,v;int n,m;double cal(double x){ int i,j; double ans=0; for(i=1;i<=m;i++) { if(x>=p[i].z+p[i].c/2.0)ans=ans+p[i].a*p[i].b*p[i].c; else if(x<=p[i].z-p[i].c/2.0)ans=ans+0; else ans=ans+p[i].a*p[i].b*(x-(p[i].z-p[i].c/2.0)); } for(i=1;i<=n;i++) { if(x>=q[i].z+q[i].r)ans=ans+4.0/3*PI*q[i].r*q[i].r*q[i].r; else if(x<=q[i].z-q[i].r)ans=ans+0; else if(x>q[i].z-q[i].r&&x<q[i].z)ans=ans+PI*(q[i].r+x-q[i].z)*(q[i].r+x-q[i].z)*(q[i].r-(q[i].r+x-q[i].z)/3.0); else ans=ans+4.0/3*PI*q[i].r*q[i].r*q[i].r-PI*(q[i].r+q[i].z-x)*(q[i].r+q[i].z-x)*(q[i].r-(q[i].r+q[i].z-x)/3.0); } return ans;}double erfen(double l,double r){ double mid,mianji; while(fabs(l-r)>eps) { mid=(l+r)/2.0; double x=cal(mid); mianji=w*len*mid-x; if(fabs(mianji-v)<=eps)return mid; else if(mianji<v)l=mid; else if(mianji>v)r=mid; } return mid;}int main(){ int T,i,j,k; // printf("%.9f\n",PI); scanf("%d",&T); while(T--) { scanf("%lf%lf%lf%d%d",&w,&len,&v,&m,&n); for(i=1;i<=m;i++) scanf("%lf%lf%lf%lf",&p[i].z,&p[i].a,&p[i].b,&p[i].c); for(i=1;i<=n;i++) scanf("%lf%lf",&q[i].z,&q[i].r); double ans=erfen(0,10000000000005); printf("%.8f\n",ans); } return 0;}
0 0
- ZOJ 3913 Bob wants to pour water(二分)
- ZOJ 3913 Bob wants to pour water 二分
- ZOJ 3913 Bob wants to pour water (计算几何+二分)
- ZOJ 3913 Bob wants to pour water (计算几何+二分)
- zoj 3913 Bob wants to pour water(二分)
- zoj 3913 Bob wants to pour water(zoj 2015年10月月赛k题)
- ZOJ 3913 Bob wants to pour water —— ZOJ Monthly, October 2015
- ZOJ 2974 Just Pour the Water(矩阵快速幂)
- ZOJ 2974-Just Pour the Water(矩阵快速幂)
- ZOJ 1973 Just Pour the Water(矩阵快速幂)
- ZOJ 2974Just Pour the Water(矩阵快速幂)
- Zoj Just Pour the Water 2974
- ZOJ - 2974 Just Pour the Water
- zoj 2974 Just Pour the Water
- zoj 2974 Just Pour the Water 矩阵
- ZOJ - 2974 Just Pour the Water
- ZOJ 2974Just Pour the Water
- [矩阵幂运算] ZOJ 2974 Just Pour the Water
- tomcate未正常关闭错误
- Android studio安装与调试
- 取消tableView选中效果
- Orders - 1731
- LeetCode(102) Binary Tree Level Order Traversal
- ZOJ 3913 Bob wants to pour water(二分)
- 这是一个开始
- 第四周项目4-建设双链表算法库
- Httppost上传
- 第2周项目3体验复杂度
- 优化之牛顿法
- 第四周项目3单链表应用(2)
- 第4周SHH数据结构—【项目5-多项式求和】
- ButterKnife--View注入框架