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;
}