首页 > 代码库 > poj3737(三分搜索)
poj3737(三分搜索)
题意:给出一个圆锥的表面积(侧面积+底面积),求圆锥的最大体积。
解法:三分半径。左边界随便取个极小的数,右边界可以假定这个圆锥是平的,高是0.这是底面积的二倍是表面积。
代码:
/****************************************************** * author:xiefubao *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> #include <cmath> #include <map> #include <set> #include <stack> #include <string.h> //freopen ("in.txt" , "r" , stdin); using namespace std; #define eps 1e-8 const double pi=acos(-1.0); typedef long long LL; const int Max=10100; const int INF=1000000007; double v; double vol(double r) { double tool=v-pi*r*r; double len=tool/pi/r; double high=sqrt(len*len-r*r); return pi*r*r*high/3.0; } double gethigh(double r) { double tool=v-pi*r*r; double len=tool/pi/r; return sqrt(len*len-r*r); } int main() { while(scanf("%lf",&v)==1) { double left=0.1,right=sqrt(v/2.0/pi); while(right-left>eps) { double middle=(left+right)/2; double middleright=(middle+right)/2; if(vol(middle)>vol(middleright)) right=middleright; else left=middle; } double high=gethigh(left); printf("%.2f\n",left*left*pi*high/3.0); printf("%.2f\n",high); printf("%.2f\n",left); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。