题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1435
思路:首先,找出一堆最大值
其次,找出一堆最大值里的一个最小值
最后,把那个最小值扔进函数
#include<bits/stdc++.h>
using namespace std;
int n;
double a[10001],b[10001],c[10001];
double q=1e-12;//精度越高越好
double s(double x){
double maxx=-0x3f3f3f3f;//既然要找最大值,那就定得越小越好
for(int i=1;i<=n;++i){
maxx=max(maxx,a[i]*x*x+b[i]*x+c[i]);//代入二次函数
//先求的是最大值,所以要用max而不是min
}
return maxx;
}
int main(){
int t;//以下全是正常操作
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
}//以上全是正常操作
double l=0,r=1000;//区间由0到1000
while(r-l>=q){
double lmid=l+(r-l)/3.0;//三分点
double rmid=r-(r-l)/3.0;//三分点
//以下宗旨:向着小的靠拢
if(s(lmid)<=s(rmid)){
r=rmid;
}
else{
l=lmid;
}
}
printf("%.4lf\n",s(l));//要的不是x,而是s(x)
}
return 0;
}