码迷,mamicode.com
首页 > 其他好文 > 详细

LA5009 Error Curves

时间:2019-04-06 18:35:20      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:efi   error   out   getc   答案   double   证明   ecs   tps   

题意

PDF

分析

因为这些函数都可以看成下凸的,所以总函数也是下凸的(可用反证法证明)。

三分答案即可,时间复杂度\(O(100)\)

代码

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
    rg T data=0,w=1;rg char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-') w=-1;ch=getchar();}
    while(isdigit(ch)) data=data*10+ch-'0',ch=getchar();
    return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll;

co int N=1e4;
int n,a[N],b[N],c[N];
double F(double x){
    double ans=a[0]*x*x+b[0]*x+c[0];
    for(int i=1;i<n;++i) ans=std::max(ans,a[i]*x*x+b[i]*x+c[i]);
    return ans;
}
int main(){
//  freopen(".in","r",stdin),freopen(".out","w",stdout);
    for(int T=read<int>();T--;){
        read(n);
        for(int i=0;i<n;++i) read(a[i]),read(b[i]),read(c[i]);
        double L=0,R=1000;
        for(int i=0;i<100;++i){
            double m1=L+(R-L)/3,m2=R-(R-L)/3;
            F(m1)<F(m2)?R=m2:L=m1;
        }
        printf("%.4lf\n",F(L));
    }
    return 0;
}

LA5009 Error Curves

标签:efi   error   out   getc   答案   double   证明   ecs   tps   

原文地址:https://www.cnblogs.com/autoint/p/10662474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!