http://poj.org/problem?id=3737

题意:给出圆锥的表面积(包含底面的圆),求圆锥的最大体积,并输出高与半径

 

常规思路:

推公式:

S=pi*r*l + pi*r*r

 l=sqrt(r*r+h*h),

联立得, r*2= s*s/(pi*pi*h*h+2*pi*s)

 V=(1/3)*pi*r*r*h,

代入r*2,求导,令一阶导数为0,

得出结果h=sqrt(2*s/pi)

 r=sqrt(s*s/(pi*pi*h*h+2*pi*s)) 

把h代到r里面,可以得到r=sqrt(s/pi/4)

v=(1.0/3.0)*(s*s)*h/(pi*h*h+2*s)

 

其他思路:

直接二分f'(x)=0

left=0.0right=sqrt(s/2pi)...


ws思路:

先用excel暴力(三分搜索)出样例的一个比较精确的解:

v=10.9254843059207

 h=4.37019320246246

 s=1.5450969 

 设输入的数是样例的d*d倍(也就是把样例等比例放大d倍)

 v'=v*d*d*d

 h'=h*d

 s'=s*d 

 比赛的时候忘记求导公式原来可以用这种ws的方法^_^

 

ps:可能因为这题数据范围小(1≤S≤10000)而且输出精读要求低(0.01)吧

 

注意:

1.pi用 #define PI acos(double(-1)) 比较稳妥,有人pi到了15位ac

2.printf 把%.2f改成%.2lf可能就过了

3.我用%.2lf  g++ wa  然而 c++ ac

用%.2f  g++ c++都ac了