题意:有一堆二次函数的系数a,b,c,自变量x的取值范围是【1,1000】问这一堆二次函数中当x取和值时使得f(x)的最小值中的最大值最小。
想法:三分x,每组系数计算一次。
#include<iostream> #include<cstring> #include<cstdio> #define eps 1e-9 using namespace std; int a[10000+5],b[10000+5],c[10000+5],n; double cal(double x) { double maxx=-1000000; for(int i=1;i<=n;i++) { double y=a[i]*x*x+b[i]*x+c[i]; if(maxx<y) maxx=y; } return maxx; } double tri_div() { double lft=0,rht=1000; while(rht-lft>eps) { double mid=(lft+rht)/2; double midd=(mid+rht)/2; if(cal(mid)<cal(midd)) { rht=midd; } else lft=mid; } return cal(lft); } int main() { int test; scanf("%d",&test); while(test--) { double res=-100000; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]>>c[i]; } printf("%.4lf\n",tri_div()); } return 0; }