专栏首页饶文津的专栏【HDU 5105】Math Problem

【HDU 5105】Math Problem

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;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【POJ 1269】判断两直线相交

    饶文津
  • 【HDU 5858】Hard problem(圆部分面积)

    交点是(\frac{\sqrt{7} L}{4\sqrt{2}},\frac{L}{4\sqrt{2}})。

    饶文津
  • 【USACO 3.2】Factorials(阶层非零尾数)

    题解:可以把5和2的个数算出来,每次把5和2都除掉,最后乘上比5多出来的2。我的解法是,每次把尾巴的0去掉,并且保留3位,算到最后取尾数就可以了。、

    饶文津
  • iOS uicollectionreusableview xib 拖不了线

    傅_hc
  • MediaCodec进行AAC编解码(文件格式转换)

    AAC,全称Advanced Audio Coding,是一种专为声音数据设计的文件压缩格式。与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的“性...

    用户2929716
  • RFC2119:表示要求的动词

    RFC(Request For Comments)指的关于互联网标准的正式文件,它们的内容必须写得非常清楚。 表达的时候,必须严格区分哪些是"建议"(sugge...

    ruanyf
  • CentOS 7 下配置ip forward(虚拟路由器)

    Linux 中ip forward功能是一个比较方便实用的功能,只需要简单配置,添加几条路由,即可实现ip转发。本文基于CentOS 7下采取一台机器充当虚拟路...

    Leshami
  • 这么骚的 js 代码,不怕被揍么

    曾经,我接手了一份大佬的代码,里面充满了各种“骚操作”,还不加注释那种,短短几行的函数花了很久才弄懂。

    Nealyang
  • 周末自己动手撸一个 HashMap,美滋滋

    HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设...

    芋道源码
  • 经常被问到的有深度有内涵的数据结构面试题

    数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构...

    分享达人秀

扫码关注云+社区

领取腾讯云代金券