zoj3203
这道题对精度的要求很高。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const double MAX = 1e4;
const double ESP = 1e-10;
double H, h, D;
double solve(double x)
{
return D - x + H - (H - h)*D / x;
//h * (D + x) / H - x + x * H / (D + x);//(h * (D + x) * (D + x) + H * H * x - D * H * x - x * x * H) / (H*(D + x));
//return h * (D + x) / H - x + x * h / ();//(h * (D + x) * (D + x) + H * H * x - D * H * x - x * x * H) / (H*(D + x));
}
int main()
{
int t; cin >> t;
while (t--)
{
cin >> H >> h >> D;
double lt = (H - h)*D / H, rt = D, mid, midmid;
//cout << "ckjjv" << endl;
while (rt - lt >= ESP)
{
//cout << lt << " " << rt << endl;
mid = lt + (rt - lt) / 3;
midmid = rt - (rt - lt) / 3;
if (solve(mid) >= solve(midmid)) rt = midmid;
else lt = mid;
}
printf("%.3lf\n", solve(lt));
}
return 0;
}