本文主要是介绍hdu_2289 cup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原题链接: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..
这篇关于hdu_2289 cup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!