一种ws的计算几何方法
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了