原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366
题意:求影子的最大值。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
#include<cmath>
#include<string>
#include<stdio.h>
#define INF 1000000000
#define EPS 1e-10
using namespace std;
int T;
double H, h, d;
double calc(double x)
{
return d - x + H - (H - h)*d / x;
}
double ternarySearch(double l, double r)
{
double mid;
double midmid;
while (r - l >= EPS)
{
mid = (l + r) / 2;
midmid = (mid + r) / 2;
if (calc(mid) > calc(midmid))
r = midmid;
else
l = mid;
}
return calc(mid);
}
int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%lf%lf%lf", &H, &h, &d);
double l = (H - h)*d / H;
double r = d;
printf("%.3lf\n",ternarySearch(l, r));
}
return 0;
}