该函数经过分析得,也是一个下凸函数,所以可以用三分来做。
#include <bits/stdc++.h>
#define eps 1e-9
using namespace std;
const int N=1e5+5;
int T,n;
double l,r,lmid,rmid,ans;
double a[N],b[N],c[N];
inline double jay(double mid)
{
double maxn=-6e6;
for (register int i=1; i<=n; ++i) maxn=max(maxn,a[i]*mid*mid+b[i]*mid+c[i]);
return maxn;
}
int main(){
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (register int i=1; i<=n; ++i) scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
l=0; r=1000;
while (r-l>=eps)
{
lmid=l+(r-l)/3; rmid=r-(r-l)/3;
if (jay(lmid)<=jay(rmid)) r=rmid;
else l=lmid;
}
ans=jay(l);
printf("%.4f\n",ans);
}
return 0;
}
赖学在家做一些别人一年前就秒切的模板题,我是个问题学生加个弱智生吗。哎。