版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/82596030
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[11111],b[11111],c[11111];
const double eps=1e-9;
int sgn(double x)
{
if(fabs(x)<eps)
return 0;
if(x<0)
return -1;
else
return 1;
}
int m;
double f(double x)
{
double ans=-1e18;
for(int i=0;i<m;i++)
{
ans=max(ans,a[i]*x*x+b[i]*x+c[i]);
}
return ans;
}
double three_search(double l,double r)
{
while(sgn(r-l)>0)
{
double lmid=l+(r-l)/3;
double rmid=r-(r-l)/3;
if(f(lmid)<=f(rmid))
r=rmid;
else
l=lmid;
}
return f(l);
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&a[i],&b[i],&c[i]);
}
double l=0.0;
double r=1000.0;
double ans=three_search(l,r);
printf("%.4lf\n",ans);
}
return 0;
}