题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2289
本来想这个题目直接解方程得出公式的,但是得到的方程三次的,表示不会解,然后就果断二分了!
都说卡精度,貌似没感觉到!
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <cmath>
using namespace std;
#define eps 1e-8
#define PI acos(-1.0)
double r1,r2,v,h,t;
double find_ans(){
double l=0,r=h,mid,now;
while(l<r){
mid=(l+r)/2;
now=PI*(r1*r1+(r1+mid*t)*(r1+mid*t)+r1*(r1+mid*t))*mid/3;
if(fabs(now-v) <= eps) return mid;
if(now>v) r=mid;
else l=mid;
}
return mid;
}
int main(){
int i,j,k,cas;
scanf("%d",&cas);
while(cas--){
scanf("%lf%lf%lf%lf",&r1,&r2,&h,&v);
t=(r2-r1)/h;
printf("%lf\n",find_ans());
}
return 0;
}