UVa 10566 - Crossed Ladders

链接

传送门

题意

两个梯子放置在交叉靠在墙上,长度分别为\(x\)\(y\),交点离地面的高度为\(c\),求两个墙间的距离。

思路

根据相似关系列方程,二分答案。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

const double eps = 1e-8;
double x, y, c;

double cal(double k) {
return c / sqrt(x * x - k * k) + c / sqrt(y * y - k * k);
}

int main() {
while (~scanf("%lf%lf%lf", &x, &y, &c)) {
if (x > y) {
swap(x, y);
}
double L = 0, R = x;
while (R - L > eps) {
double M = (L + R) / 2;
if (cal(M) < 1) {
L = M;
} else {
R = M;
}
}
printf("%.3f\n", (L + R) / 2);
}
return 0;
}