Cup HDU - 2289

原题链接
考察:二分
思路:
  不要用圆锥比例求\(r_水\),当情况是圆柱会\(/0\),利用圆台上下半径差的三角形求\(r_水\).二分水的高度.
  其实不是很懂为什么可以二分,主要是\(V_水\)\(r_水\)\(h_水\)两个变量的影响,如果一方增大另一方就会缩小,有大佬懂t我一下.
  全网貌似只有我推的算\(r_水\)的公式是这样....不是很懂...

Code

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const double eps = 1e-8;
const double P = 1.0 / 3;
const double PI = acos(-1);
double r, R, H, v, h;
bool check(double mid)
{
    double rm = (H - mid) * (R - r) / H + r;
    return P * PI * mid * (R * R + rm * R + rm * rm) >= v;
}
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        cin >> R >> r >> H >> v;
        double l = 0, r = H;
        while(r-l>=eps)
        {
            double mid = (l + r) / 2;
            if(check(mid))
                r = mid;
            else 
                l = mid;
        }
        printf("%.6lf\n", r);
    }
    return 0;
}

posted @ 2021-07-04 21:32  acmloser  阅读(21)  评论(0编辑  收藏  举报