三分 找两个mid 进行比较取较小那个更新l 或是 r
x表示从人到灯的距离,范围从D-D*h/H到 D
#include<bits/stdc++.h>
using namespace std;
double H,h,D;
double cal(double x)
{
return D-x+H-D*(H-h)/x;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int i,j,k;
cin>>H>>h>>D;
double l=D-D*h/H;
double r=D;
while(l+1e-10<r)
{
double mid=(l+r)/2;
double mmid=(mid+r)/2;
if(cal(mid)-cal(mmid)<0)
{
l=mid;
}
else
{
r=mmid;
}
}
printf("%.3f\n",cal(l));
}
}