[洛谷U62364]三次函数极值

U62364 三次函数极值

题面

给定一个三次函数\(f(x)=a_3x^3+a_2x^2+a_1x+a_0\)
求其极值。

格式

输入包括一行四个整数\(a_3,a_2,a_1,a_0\)

输出包括几个坐标或-1.两个坐标时请先输出横坐标较小的。

样例#1

输入

2 -10 5 1

输出

(0.272233,1.66041)(3.0611,-20.0308)

样例#2

输入

1 0 0 0

输出

-1

数据限制

规模 \(a_i\)
40% \([-9,10]\)
60% \([-299,700]\)

分析

当三次函数取得极值时,其导函数\(f'(x)=0\)
所以把三次函数求出导函数后,只需解一个一元二次方程。

解法

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double calc(double x){
    return ((a*x+b)*x+c)*x+d;
}
double l,m,n,delta;
int main(){
    cin>>a>>b>>c>>d;
    l=3*a;
    m=2*b;
    n=c;
    delta=m*m-4*l*n;
    if(delta>0){
        double x1=(-m-sqrt(delta))/(2*l);
        double x2=(-m+sqrt(delta))/(2*l);
        cout<<"("<<x1<<","<<calc(x1)<<")("<<x2<<","<<calc(x2)<<")";
    }else{
        cout<<"-1";
    }
}

数据

猜你喜欢

转载自www.cnblogs.com/water-lift/p/10400694.html