51nod 1629 B君的圆锥
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
收藏
关注
B君要用一个表面积为S的圆锥将白山云包起来。
B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。
注意圆锥的表面积包括底面和侧面。
Input
一行一个整数,表示表面积S。(1 <= S <= 10^9)
Output
一行一个实数,表示体积。
Input示例
8
Output示例
1.504506
圆锥表面积s=π*r*r + π * r*l
体积=π*r*r*h/3
r:底面圆半径
l:母线长
三分半径
#include<cstdio> #include<cmath> const double pi=acos(-1.0); double s; double solve(double r) { double l=(s-pi*r*r)/(pi*r); double h=sqrt(l*l-r*r); return pi*r*r*h/3; } int main() { scanf("%lf",&s); double l=0,r=s,mid1,mid2; int T=100; while(T--) { mid1=r/3+l*2/3; mid2=l/3+r*2/3; if(solve(mid1)<solve(mid2)) l=mid1; else r=mid2; } printf("%.6lf",solve(mid1)); }