• 【HDU 5105】Math Problem


    f(x)=|ax3+bx2+cx+d|

    求f(x)在LxR的最大值。

    分析

    参数有可能是0,注意分类讨论

    1.当a=0时

      b=0,f为一次函数(c≠0)或者常数函数(c=0),最大值点在区间端点。

      b≠0,f为二次函数,最大值点在区间端点或者x0=c/(2*b),当L≤x0≤R时,ans=max{f(L),f(R),f(x0)}。

    2.当a≠0时,f为三次函数

      最大值点在区间端点或者导函数的零点x1,x2

      注意x1,x2是否在[L,R]区间。

    代码

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define dd double
    
    using namespace std;
    
    dd a,b,c,d,l,r;
    dd f(dd x)
    {
        return fabs(a*x*x*x+b*x*x+c*x+d);
    }
    void ff(dd a,dd b,dd c,dd& ans)
    {
        if(a==0)
        {
            if(b==0) return;
            ans=max(ans,f(-c/b));
            return;
        }
        if(b*b<4*a*c) return;
        dd q=sqrt(b*b-4*a*c);
        dd x1=(-q-b)/(2*a);
        dd x2=(q-b)/(2*a);
        if(l<x1&&x1<r)
        {
            ans=max(ans,f(x1));
            if(r>x2) ans=max(ans,f(x2));
        }
        else if(l<x2&&x2<r) ans=max(ans,f(x2));
    }
    int main()
    {
        while(~scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&l,&r))
        {
            dd ans;
            ans=max(f(l),f(r));
            ff(3*a,2*b,c,ans);
            printf("%.2lf
    ",ans);
        }
        return 0;
    }

    下面这样写,省了判断区间和顶点的不同位置关系。

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define dd double
    
    using namespace std;
    
    dd a,b,c,d,l,r,ans;
    dd f(dd x)
    {
        if(x<l||x>r)return -1;
        return fabs(a*x*x*x+b*x*x+c*x+d);
    }
    dd ff(dd a,dd b,dd c)
    {
        if(a==0)
        {
            if(b==0) return -1;
            return f(-c/b);
        }
        if(b*b<4*a*c) return -1;
        dd q=sqrt(b*b-4*a*c);
        dd x1=(-q-b)/a;
        dd x2=(q-b)/a;
        return max(f(x1/2),f(x2/2));
    }
    int main()
    {
        while(~scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&l,&r))
        {
            ans=max(f(l),f(r));
            ans=max(ans,ff(3*a,2*b,c));
            printf("%.2lf
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    golang实现单链表
    koa中间执行机制
    vuex源码简析
    从浏览器渲染过程看重绘回流
    javascript的this
    js 设计模式:观察者和发布订阅模式
    H5 移动端 键盘遮挡焦点元素解决方案
    webpack4 css modules
    Daily,一个入门级的 React Native 应用
    javascript: 类型转换
  • 原文地址:https://www.cnblogs.com/flipped/p/5245237.html
Copyright © 2020-2023  润新知