Teach Yourself Pottery

来源:互联网 发布:南京弘历软件 编辑:程序博客网 时间:2024/06/14 12:55

Gym - 100113E
这里写图片描述

给定圆台的一面的直径和法线长度,问最大体积
直接三分就好了。

#include <bits/stdc++.h>using namespace std;const double pi = acos(-1);double L, D, l, r, mid1, mid2, v1, v2, ans;double get(double x) {    return sin(x)*(D*D*3+L*D*6*cos(x)+L*L*cos(x)*cos(x)*4)*pi*L/12.0;}int main() {    freopen("frustum.in","r",stdin);    freopen("frustum.out","w",stdout);    scanf("%lf %lf", &L, &D);    l = 0; r = pi/2.0;    for (int T = 1; T <= 100000; T++) {        mid1 = l+(r-l)/3.0;        mid2 = l+(r-l)/3.0*2;        v1 = get(mid1);        v2 = get(mid2);        if (v1 > v2) {            ans = max(ans, v1);            r = mid2;        } else {            ans = max(ans, v2);            l = mid1;        }    }    printf("%.10lf\n", ans);}