三分/函数
题目看上去挺吓人的,尤其是这个F(x),乍一看F(x)是一个相当复杂的函数, 但实际上我们拿笔画一下会发现这个函数是一个先减后增的函数,类似于一个大的凹二次函数
那么这题就好些多了
#include<bits/stdc++.h>
using namespace std;
double f(double a[], double x) {
double res = 0;
for (int i = 0;i <3;i++) {
res = res * x + a[i];
}
return res;
}
struct coefficient {
double a[3];
};
double max_x(double x, vector<coefficient>& coe) {
double m = f(coe[0].a, x);
for (int i = 0;i < coe.size();i++) {
m = max(f(coe[i].a, x), m);
}
return m;
}
int main() {
int T;
cin >> T;
cout << fixed << setprecision(4);
while (T--) {
int n;
cin >> n;
vector<coefficient> coe(n);
for (int i = 0;i < n;i++) {
cin >> coe[i].a[0] >> coe[i].a[1] >> coe[i].a[2];
}
double l = 0, r = 1000,ans=0;
int count = 100;
while (count--) {
double mid_l = (2 * l + r) / 3;
double mid_r = (l + 2 * r) / 3;
double left = max_x(mid_l, coe), right = max_x(mid_r, coe);
if (left>right) {
l = mid_l;
}
else {
r = mid_r;
}
ans = max_x((l + r) / 2, coe);
}
cout << ans << endl;
}
}
