题目描述
请见原题
样例
input:30 40 10
output:26.033
图解
解题思路
假设已知s求c,通过相似模型可得c=ab/a+b ,然后移动两栋楼,知道找出合适的c为止(详见注释)
C++ 代码
#include<bits/stdc++.h>
using namespace std;
double x,y,c;
double calc(double s)//求s函数
{
double a=sqrt(x*x-s*s);//勾股定理
double b=sqrt(y*y-s*s);
return a*b/(a+b);
}
int main()
{
cin>>x>>y>>c;
double l=0,r=min(x,y);//l为两栋楼之间的最小值,r为最大值
while(r-l>1e-5)
{
double mid=(l+r)/2;
if(calc(mid)>c) l=mid;//太近了 ,放的远一些
else r=mid; //太远了,放的近一些
}
printf("%.3lf\n",r);//保留三位小数输出
return 0;
}//yr