hdu 2289 cup

来源:互联网 发布:淘宝小件静物摄影技巧 编辑:程序博客网 时间:2024/06/05 06:41

水平面的半径u可以根据直角梯形的面积求出:
(r+u)*h + (u+R)*(H-h) = (r+R)*H
得出(R-r)*h = (u-r)*H
得 u = r + (R-r)*h/H
圆台体积计算公式:V= π*h*( R^2 + R*u + u^2 ) / 3
一直WA,找不到原因在哪里,所以就百度,查了n遍实在找不到那里错,结果改了二分标记的地方就AC了。以后得好好研究一下为什么。

#include<stdio.h>#include<math.h>double pi=acos(-1);double ri,rr,h,v;//ri是r,rr是Rdouble cal(double x){double u=(rr-ri)*x/h+ri;return (pow(ri,2)+pow(u,2)+ri*u)/3*pi*x;}int main(){int cases;double left,right,mid;while(scanf("%d",&cases)!=EOF){while(cases--){scanf("%lf%lf%lf%lf",&ri,&rr,&h,&v);left=0;right=rr;while(right-left>1e-10){mid=(left+right)/2;if(cal(mid)>v){right=mid;//right=mid-1e-10;} else{left=mid;//left=mid+1e-10;}}printf("%.6lf\n",(left+right)/2);}}return 0;}