POJ3737 UmBasketella

gate

用时:20min(看题解了)

题目大意:
给定圆锥的表面积(S),求这个圆锥的最大体积(V),以及此时它的高(h)与底面半径(r)

(S = pi rl+pi r^2)
(h = sqrt{l^2-r^2})
(V = dfrac{1}{3}pi r^2 h)
(V = dfrac{1}{3}sqrt{S^2 r^2-2pi Sr^4})

(V)是关于(r)的一个单峰函数,三分(r)求解即可。

注意:
(pi = acos(-1.0))
因为(cos(pi) = -1),所以(arccos(-1) = pi)
注意这里要写(-1.0),否则会(CE)

(code)

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<algorithm>
#define MogeKo qwq
using namespace std;

const double Pi = acos(-1.0);
const double eps = 1e-6;

double S,L,R,l,h,V;

double calc(double r){
    l = (S/Pi - r*r) / r;
    h = sqrt(l*l - r*r);
    V = Pi * r*r * h / 3.0;
    return V;
}

int main(){
    while(~scanf("%lf",&S)){
        L = 0,R = S;
        while(R-L >= eps){
            double d = (R-L)/3.0;
            double m1 = L+d;
            double m2 = R-d;
            if(calc(m1) < calc(m2)) L = m1;
            else R = m2;
        }   
        printf("%.2lf
%.2lf
%.2lf
",calc(L),h,L);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/mogeko/p/13273880.html