1 条题解
-
0
解题思路
设街道宽度为d。根据相似三角形的原理,我们可以得到一个关于d的方程。假设从右侧梯子底部到交叉点的水平距离为a,从左侧梯子底部到交叉点的水平距离为b,则。根据相似三角形的性质,对于右侧梯子有(为右侧梯子顶端到交叉点的垂直距离),对于左侧梯子有(为左侧梯子顶端到交叉点的垂直距离),且分别是左右两侧楼的高度,同时,。通过这些关系可以推导出一个复杂的方程,直接求解比较困难,所以可以使用二分查找的方法来逼近街道宽度d的值。
代码
#include <cmath> #include <iomanip> #include <iostream> using namespace std; double x, y, c; bool judge(double d) { double t1 = sqrt(x * x - d * d); double t2 = sqrt(y * y - d * d); if (t1 * t2 >= c * (t1 + t2)) { return true; } else { return false; } } int main() { while (cin >> x >> y >> c) { double l = 0, r = min(x, y), mid; int cnt = 99; while (cnt--) { mid = (l + r) / 2.0; if (judge(mid)) { l = mid; } else { r = mid; } } cout << fixed << setprecision(3) << mid << endl; } return 0; }
- 1
信息
- ID
- 1508
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者