Error Curves
题目链接:HDU - 3714
题意:x在区间[0,1000]取值时,n个函数中的最大值的最小值;(最大值指x固定,n个函数的最值; 最小值指在所有得到的最大值中的最小值);
三分x;
注意精度问题!!!此题精度要高!!!
#include <bits/stdc++.h>
#define eps 1e-10//就是这里一开始是1e-8一直WA,,,
#define INF -1e12
using namespace std;
int n;
double a[10010], b[10010], c[10010];
double cal(double x){
double temp=INF;
for(int i=0; i<n; i++){
temp=max(temp, a[i]*x*x+b[i]*x+c[i]);
}
return temp;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%lf%lf%lf", &a[i], &b[i], &c[i]);
}
double l=0.0, r=1000.0;
while(r-l>eps){
double mid=l+(r-l)/3;
double midd=r-(r-l)/3;
if(cal(mid)>cal(midd)) l=mid;
else r=midd;
}
printf("%.4lf\n", cal(l));
}
return 0;
}