1 条题解
-
0
当 时影子刚到墙脚。解方程得:
#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
- 上传者