思路:这个题的思路和上一个题的思路一样,但是这个题目卡精度,要在计算时,卡到1e-9。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 10100 #define eps 1e-9 using namespace std; int T,n; double ans; double l,r,mid1,mid2; double a[MAXN],b[MAXN],c[MAXN]; double f(double x){ ans=-0x7f7f7f7f; for(int i=1;i<=n;i++) ans=max(ans,x*x*a[i]+x*b[i]+c[i]); return ans; } int main(){ 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]); l=0;r=1000; while(r-l>eps){ mid1=(l+r)/2; mid2=(mid1+r)/2; if(f(mid1)>f(mid2)) l=mid1; else r=mid2; } printf("%.4lf ",f(l)); } }