POJ-3737

POJ-3737

题意

给出一个圆锥的表面积,求最大体积。

思路

显然,得到底面积的半径后,一切都能得到。在我们慢慢延长半径时,发现不满足线性,而是单峰函数。故三分。

圆锥复习

image

Code:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
#define cf int _o_o_;cin>>_o_o_;for (int Case = 1; Case <= _o_o_;Case++)
#define SZ(x) (int)(x.size())
inline void _A_A_();
signed main() {_A_A_();return 0;}

// #define int long long
int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
const int N = 210, M = 5010;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
double area;

double check(double mid) {
    double left = area -  acos(-1) * mid * mid;
    double muxian = left / acos(-1) / mid;
    double h = sqrtl(muxian*muxian - mid * mid);
    return acos(-1) * mid * mid * h / 3.0;
}

inline void _A_A_() {
    while (~scanf("%lf", &area)) {
        double l = 0.00001, r = sqrtl(area / acos(-1));
        while (r - l > eps) {
            double len = r - l;
            double mid1 = l + len / 3.0, mid2 = r - len/3.0;
            if (check(mid1) > check(mid2)) {
                r = mid2;
            }
            else l = mid1;
        }
        double left = area -  acos(-1) * l * l;
        double muxian = left / acos(-1) / l;
        double h = sqrtl(muxian*muxian - l * l);
        double vol =  acos(-1) * l * l * h / 3.0;
        printf("%.2lf\n%.2lf\n%.2lf\n", vol, h, l);
    }
}
posted @   Uzhia  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示