原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2289
分析:
题目分析:给你一个倒置的圆台(上圆半径R>=下圆半径r),给你一定体积的水,问将水倒入圆台后,水的高度。
如下图
如右图设装得水高为h1,则此时上圆半径
r1= r + r2
在三角形ABC中由三角形相似得
所以r1=r+
由圆台的体积公式可得:
V=
接着二分h可得解:
我的代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
const double pi=4.0*atan(1.0);
while(t--)
{
double r,R,h,v;
double ansh;
scanf("%lf%lf%lf%lf",&r,&R,&h,&v);
double lh=0;
double rh=h;
while(lh<=rh)
{
if(rh-lh<1e-7) break;
double mid=(lh+rh)/2.0;
double nr=(R-r)*mid/h+r;
double nv=pi*(r*r+r*nr+nr*nr)*mid/3.0;
if(nv<v)
{
lh=mid;
}
else
{
rh=mid;
}
}
ansh=rh;
printf("%.6lf\n",ansh);
}
return 0;
}
总结:练习的时候,些不出来TAT..