poj 2507Crossed ladders <计算几何>

时间:2023-03-09 06:26:50
poj 2507Crossed ladders <计算几何>

链接:http://poj.org/problem?id=2507

题意:哪个直角三角形,一直角边重合, 斜边分别为 X, Y, 两斜边交点高为 C , 求重合的直角边长度~

思路: 设两个三角形不重合的两条直角边长为 a , b,根据 三角形相似, 则有 1/a + 1/b =1/c, 二分枚举答案得之~

 #include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
double x, y, c;
const double eps=1e-;
double get( double p )
{
return 1.0/sqrt( x*x-p*p ) + 1.0/sqrt( y*y-p*p );
}
int main( )
{
while( scanf("%lf%lf%lf", &x, &y, &c)!= EOF ){
double l=, r=min( x, y ), mid;
while( l<r ){
mid=(l+r)/;
if( get(mid) > 1.0/c )
r=mid-eps;
else if( get(mid) < 1.0/c )
l=mid+eps;
else break;
}
printf("%.3f\n", mid);
}
return ;
}