题意:
给出n个二次方程ax^2 + bx + c的a,b,c;
然后要求一个x,使x代入所有方程的解的最大值最小;
思路:
因为这个这个值的变化是一个抛物线,所以不能二分,要用三分;
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10005;
int a[N], b[N], c[N], n;
double cul(double x) {
double ans = a[0]*x*x + b[0]*x + c[0];
for(int i = 1; i < n; i++)
ans = max(ans, a[i]*x*x + b[i]*x + c[i]);
return ans;
}
int main() {
int t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d%d%d", &a[i], &b[i], &c[i]);
double l = 0.0, r = 1000.0;
while(r - l > 1e-9){
double mid1 = l + (r - l) / 3;
double mid2 = r - (r - l) / 3;
if(cul(mid1) < cul(mid2))
r = mid2;
else
l = mid1;
}
printf("%.4lf\n", cul(l));
}
}