POJ 3737 UmBasketella 3分
POJ 3737 UmBasketella 三分
来源:http://poj.org/problem?id=3737
题意:给你一个圆锥,圆锥面积给出,问你圆锥的最大体积是多少。
思路:枚举底面圆半径,算圆锥的体积。可以列出表达式,满足三分,因此可以三分枚举底面圆半径。
代码:
#include <iostream> #include <cmath> #include <string.h> #include <cstdio> using namespace std; const double pi = acos(-1.0); const double eps = 1e-6; double cal(double x,double s){ double R = (s - x * x * pi) / pi / x; double H = sqrt(R * R - x * x); return x * x * pi * H / 3.0; } int main(){ double area; while(scanf("%lf",&area) != EOF){ double lp = 0.0,rp = sqrt(area / pi); double r = 0.0; while(lp + eps < rp){ double mid1 = lp + (rp - lp) / 3.0; double mid2 = rp - (rp - lp) / 3.0; double value1 = cal(mid1,area); double value2 = cal(mid2,area); //printf("value1 = %.2lf value2 = %.2lf\n",value1,value2); if(value1 >= value2){ //r = mid2; rp = mid2; } else{ r = mid1; lp = mid1; } } double R = ( area - pi * r * r ) / ( pi * r ); double H = sqrt(R * R - r * r); double V = pi * r * r * H / 3.0; printf("%.2lf\n",V); printf("%.2lf\n",H); printf("%.2lf\n",r); } return 0; }