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

[Poj3737]UmBasketella (三分法)

2018年01月13日 ⁄ 综合 ⁄ 共 452字 ⁄ 字号 评论关闭
#include<cstdio>
#include<cmath>
#define eps 10e-6
const double pi = acos(double(-1));
double S;

inline double cal(double r) {    
    double R=(S-r*r*pi)/pi/r;
    double H=sqrt(R*R-r*r);
    return r*r*pi*H/3.0;
}

int main() {
    while (~scanf("%lf", &S)) {
        double l = 0, r = sqrt(S / pi);
        double m1, m2, v1, v2;
        while (l + eps < r) {
            m1 = l + (r - l) / 3;
            m2 = r - (r - l) / 3;
            v1 = cal(m1);
            v2 = cal(m2);
            if (v1 < v2)l = m1;
            else r = m2;
        }
        double R=(S-pi*r*r)/(pi*r);
        double H=sqrt(R*R-r*r);
        double V=pi*r*r*H/3.0;
        printf("%.2f\n%.2f\n%.2f\n",V,H,r);
    }
    return 0;
}

抱歉!评论已关闭.