1 条题解

  • 0
    @ 2023-8-29 16:56:20

    image

    HD×Hhx=0H-D\times\frac{H-h}{x}=0 时影子刚到墙脚。解方程得:x=(Hh)×DHx = \frac{(H-h)\times D}{H}

    #include <bits/stdc++.h>
    using namespace std;
    double H, h, D;
    double minX; // x 超过了这么大之后墙上就有影子了
    double maxX; // x 超过了这么大之后地上就没影子了(D)
    double f(double x)
    {
        double ans1 = D - x;                 // 地板部分
        double ans2 = H - (D * (H - h) / x); // 墙上部分
        return ans1 + ans2;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int T;
        cin >> T;
        while (T--)
        {
            cin >> H >> h >> D;
            minX = (H - h) * D / H;
            maxX = D;
            double l = minX;
            double r = maxX;
            while (r - l > 1e-6)
            {
                double midL = (l + r) / 2;
                double midR = (midL + r) / 2;
                double ansL = f(midL);
                double ansR = f(midR);
                // 先增后减的函数找最大值
                if (ansL < ansR)
                    l = midL;
                else
                    r = midR;
            }
            cout << fixed << setprecision(3) << f(l) << "\n";
        }
        return 0;
    }
    
    • 1

    信息

    ID
    657
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    17
    已通过
    6
    上传者