现在的位置: 首页 > 综合 > 正文

POJ 3737 UmBasketella 三分

2013年08月27日 ⁄ 综合 ⁄ 共 807字 ⁄ 字号 评论关闭

来源: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;
}

抱歉!评论已关闭.