Crossed Ladders
Input: Standard Input
Output: Standard Output
Time Limit: 1 Second
Each line of input contains three positive floating point numbers giving the values of x, y, and c.
For each line of input, output one line with a floating point number giving the width of the street in feet, with three decimal digits in the fraction.
Sample Input Output for Sample Input
30 40 10 12.619429 8.163332 3 10 10 3 10 10 1 | 26.033 7.000 8.000 9.798 |
Problemsetter: Alberta Local Contest
原文好像不好复制……就这样吧。
题意:给你两个梯子的长度,和交点的高度,问你放置的宽度。
思路:二分,比较简单的几何。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
typedef long long ll;
using namespace std;
double x1,x2,l1,l2,h,h1,h2,ans,l,r,mi;
double solve()
{ h1=sqrt(l1*l1-mi*mi);
h2=sqrt(l2*l2-mi*mi);
x1=l1*h1/(h1+h2);
x2=l1*h2/(h1+h2);
return x2*h1/l1;
}
int main()
{ while(~scanf("%lf%lf%lf",&l1,&l2,&h))
{ l=0;r=min(l1,l2);
while(r-l>0.0001)
{ mi=(l+r)/2;
if(solve()>h)
l=mi;
else
r=mi;
}
printf("%.3f\n",l);
}
}