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

 

posted @ 2013-07-22 10:18  淡墨æ末央  阅读(214)  评论(0编辑  收藏  举报