原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366
题意:求影子的最大值。 AC代码:
#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<vector> #include<cstring> #include<queue> #include<stack> #include<algorithm> #include<cmath> #include<string> #include<stdio.h> #define INF 1000000000 #define EPS 1e-10 using namespace std; int T; double H, h, d; double calc(double x) { return d - x + H - (H - h)*d / x; } double ternarySearch(double l, double r) { double mid; double midmid; while (r - l >= EPS) { mid = (l + r) / 2; midmid = (mid + r) / 2; if (calc(mid) > calc(midmid)) r = midmid; else l = mid; } return calc(mid); } int main() { scanf("%d", &T); while (T--) { scanf("%lf%lf%lf", &H, &h, &d); double l = (H - h)*d / H; double r = d; printf("%.3lf\n",ternarySearch(l, r)); } return 0; }