三分求一堆最大值中的最小
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=10000+100; const int inf=0x3f3f3f3f; double a[maxn],b[maxn],c[maxn]; int t,n; double f(double x) { double maxi=a[1]*x*x+b[1]*x+c[1]; for(int i=2;i<=n;i++) { double mm=a[i]*x*x+b[i]*x+c[i]; maxi=max(maxi,mm); } return maxi; } double sanfen(double l,double r) { while(r-l>1e-10) { double p=l+(r-l)/3.0; double q=r-(r-l)/3.0; if(f(p)<=f(q)) r=q; else l=p; } return l; } 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]); double x=sanfen(0,1000.0); printf("%.4lf\n",f(x)); } return 0; }
时间: 2024-10-12 16:22:28