ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Solution - 楼梯

2021-10-02 19:01:03  阅读:176  来源: 互联网

标签:BD frac double Solution sqrt mid 楼梯 GH


描述

一个街道两侧有两栋楼,现在有如图所示两楼梯 \(x\) , \(y\)。

两个楼梯分别如图放置。

已知两个楼梯的长度和他们交点离地面的高度,求两栋楼之间的距离。

image

简要题意: 如图,已知 \(AD\), \(CB\), \(GH\)。求 \(BD\) 的长。
image

题解

如果直接暴力算出 \(BD\) 的话好像有些困难,那么我们就萌生出二分的想法。

然后我们可以证明出 \(GH=\frac{AB×CD}{AB+CD}\)

观察这个式子 \(GH\) 随着 \(BD\) 的增大而减小,所以是具有单调性的,可以进行二分答案。

证明过程 设 $AD=a$ , $BC=b$, $GH=c$, $AB=x$, $CD=y$, $BD=s$

由勾股定理,我们有:

\( \begin{cases}x=\sqrt{a^2-s^2} \\y=\sqrt{b^2-s^2} \end{cases} \)

易证 \(\triangle ABD \sim \triangle GHD\)

\(\therefore \frac{c}{x}=\frac{HD}{s} \to HD=\frac{sc}{x}\)

同理可得

\(\frac{c}{y}=\frac{BH}{s} \to BH=\frac{sc}{y}\)

又 \(\because HD+BH=s\)

\(\therefore \frac{sc}{x}+\frac{sc}{y}=s\)

整理得 \(c=\frac{xy}{x+y}\)

(证毕)

\(code\)

#include <bits/stdc++.h>
using namespace std;
double a, b, c;
bool check(double s) {
    double x = sqrt(a * a - s * s);
    double y = sqrt(b * b - s * s);
    return x * y / (x + y) > c;
}
int main() {
    scanf("%lf %lf %lf", &a, &b, &c);
    double l = 0, r = 2500.0;
    while (r - l > 0.0001) {
        double mid = (l + r) / 2.0;
        if (check(mid))
            l = mid;
        else
            r = mid;
    }
    printf("%.3lf", l);
    return 0;
}

标签:BD,frac,double,Solution,sqrt,mid,楼梯,GH
来源: https://www.cnblogs.com/cqbzjyh/p/15362425.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有