ZOJ Light Bulb - 3203

时间:2022-03-23 06:25:45

题意:人左右走动,求影子L的最长长度。

思路:三分人在D上的位置。注意影子长=D-x+H-(H-h)*D/x。

 #include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#define clc(a,b) memset(a,b,sizeof(a))
typedef long double ld;
typedef long long ll;
const int N = ;
const double eps=1e-;
const int inf=-;
const int maxn=1e5+;
const double Pi=acos(-);
using namespace std; double H,h,D; double calc(double x)
{
return D-x+H-(H-h)*D/x;
} double solve(double l,double r)
{
//cout<<"11"<<endl;
double mid,midmid;
double d1,d2;
while(r-l>=eps)
{
mid=(l+r)/;
midmid=(mid+r)/;
d1=calc(mid);
d2=calc(midmid);
if(d1>=d2)
r=midmid;
else
l=mid;
}
return d1;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&H,&h,&D);
printf("%.3lf\n",solve((H-h)*D/H,D));
}
return ;
}