poj 2507Crossed ladders <计算几何>

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

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

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

 1 #include <cstdio>

 2 #include <cmath>

 3 #include <iostream>

 4 #include <algorithm>

 5 #include <cstring>

 6 using namespace std;

 7 double x, y, c;

 8 const double eps=1e-8;

 9 double get( double p )

10 {

11     return 1.0/sqrt( x*x-p*p ) + 1.0/sqrt( y*y-p*p );

12 }

13 int main( )

14 {

15     while( scanf("%lf%lf%lf", &x, &y, &c)!= EOF ){

16         double l=0, r=min( x, y ), mid;

17         while( l<r ){

18             mid=(l+r)/2;

19             if( get(mid) > 1.0/c )

20                 r=mid-eps;

21             else if( get(mid) < 1.0/c )

22                 l=mid+eps;

23             else break;

24         }

25         printf("%.3f\n", mid);

26     }

27     return 0;

28 }
View Code

 

你可能感兴趣的:(sed)