前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【HDU 5105】Math Problem

【HDU 5105】Math Problem

作者头像
饶文津
发布2020-06-02 15:23:44
2330
发布2020-06-02 15:23:44
举报

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

求f(x)在L≤x≤R的最大值。

分析

参数有可能是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\n",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\n",ans);
    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 分析
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档