HDU 2289 Cup【二分】

<题目链接>

题目大意:

一个圆台型的杯子,它的上底半径和下底半径已经给出,并且给出它的高度,问你,体积为V的水倒入这个杯子中,高度为多少。

解题分析:

就是简单的二分答案,二分枚举杯中水的高度,然后根据几何计算出该高度下,水的上半径,然后计算出该高度下水的体积,在与实际水的体积进行比较,从而确定最终的答案。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 
 5 const double PI=acos(-1.0);
 6 const double eps=1e-9;
 7 double R,r,H,v;
 8 
 9 double vol(double h){
10     double rtop=(H*r+h*(R-r))*1.0/H*1.0;    //利用几何关系计算出高度为h处圆杯的半径
11     return PI*h*(rtop*rtop+r*r+rtop*r)/3;   //利用公式计算出该高度下水的体积
12 }
13 
14 int main(){
15     int T;scanf("%d",&T);
16     while(T--){
17         scanf("%lf%lf%lf%lf",&r,&R,&H,&v);
18         double l=0,r=H;
19         while(r-l>eps){
20             double mid=(l+r)/2;     //二分答案,枚举水杯中水的高度
21             if(vol(mid)>v)r=mid;
22             else l=mid;
23         }
24         printf("%.6lf
",l);
25     }
26     return 0;
27 }

2018-11-02

原文地址:https://www.cnblogs.com/00isok/p/9899052.html