题目描述
blablabla
思路
首先要明确两个楼之间的距离与c成正比,这是一个单调的问题,且如果用公式硬推距离需要很多未知数很复杂,所以利用单调性进行二分(二分相当于多给了条件)
通过勾股定理即可从距离mid求得c,将求的c与给定的c进行比较,浮点数二分,直到找到正确的的值为止
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
double x,y,c;
double calc(double mid){
double rx = sqrt(x * x - mid * mid);
double ry = sqrt(y * y - mid * mid);
return (rx * ry) / (rx + ry);
}
int main(){
cin>>x>>y>>c;
double l = 0,r = min(x,y);
double mid;
// 结果保留三位小数,一般多取两位
while(r - l > 1e-5){
mid = (l + r) / 2;
if(calc(mid) > c) l = mid;
else r = mid;
}
printf("%.3f",l);
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla