Uva - 10566 - Crossed Ladders

来源:互联网 发布:服装大师软件 编辑:程序博客网 时间:2024/06/06 03:18

题意:两栋楼之间有两个梯子,如下图中的虚线所示,一个梯子的长度为x,另一个梯子的长度为y,两个梯子的交点离地面的高度为c,问两栋楼之间的距离。

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=20835#problem/G

——>>几何题,设宽度为w,交点距右楼距离为u,则



利用相似三角形推出关系:


解方程,这是一个减函数,二分答案即可。

(方程左边成一个函数,减函数,求根)

#include <iostream>#include <cmath>#include <iomanip>using namespace std;#define F(u) 1.0/sqrt(x*x-u*u) + 1.0/sqrt(y*y-u*u) - 1.0/cint main(){    double x, y, c;    while(cin>>x>>y>>c)    {        double R = (x < y) ? x : y, L = 0, M;        for(int i = 0; i < 100; i++)        {            M = L + (R-L) / 2;            if(F(M) >= 0) R = M;            else L = M;        }        cout<<setiosflags(ios::fixed)<<setprecision(3)<<L<<endl;    }    return 0;}