原题链接
解题思路:易知F(x)为一个先递减在递增的函数,所以我们可以用三分法求解
C++代码
#include <bits/stdc++.h>
// #define int long long
#define LL long long
using namespace std;
const int N = 1e5 + 10;
double a[N], b[N], c[N];
int t, n;
double check(double mid)
{
double maxn = -2e9;
for (int i = 1; i <= n; i ++ )
{
maxn = max(maxn, a[i] * mid * mid + b[i] * mid + c[i]);
}
return maxn;
}
signed main()
{
cin >> t;
while (t -- )
{
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i] >> b[i] >> c[i];
double l = 0, r = 1000;
while (r - l > 1e-6)
{
double mid = (r - l) / 3;
double lf = l + mid, rf = r - mid;
if (check(lf) <= check(rf)) r = rf;
else l = lf;
}
cout << fixed << setprecision(4) << check(r) << endl;
}
return 0;
}
参考博客