您的位置:首页 > 其它

poj2507 Crossed ladders

2017-11-09 19:05 162 查看
题意:


已知x,y,c,求d

题解:答案满足单调性,即x,y恒定时,d越大,c越小。因此可以二分答案。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define eps 1e-5
double l,r,mid,a,b,c,x,y,now;
bool judge(double k){
x=sqrt(a*a-k*k);
y=sqrt(b*b-k*k);
now=(x*y)/(x+y);
if(now-c>eps) return 0;
else return 1;
}
int main(){
while(scanf("%lf%lf%lf",&a,&b,&c)!=EOF){
l=0;r=max(a,b);
while(r-l>=eps){
mid=(l+r)/2.0;
if(judge(mid)) r=mid;
else l=mid;
}
printf("%.3lf\n",l);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 二分