zoukankan      html  css  js  c++  java
  • 【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;
    }
  • 相关阅读:
    Objective-C中不同方式实现锁(二)-11-多线程
    共享资源加锁的操作方法-10-多线程
    ios 下锁使用- 09-多线程
    iOS开发-线程安全-09-多线程
    线程同步-iOS多线程编程指南(四)-08-多线程
    《GCD 实现同步锁》-07-多线程
    死锁-06-多线程
    生产者消费者问题-05-多线程
    递归锁+条件锁+互斥锁-04-多线程
    Android开发技术周报 Issue#62
  • 原文地址:https://www.cnblogs.com/flipped/p/5245237.html
Copyright © 2011-2022 走看看