[洛谷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";
	}
}

数据

posted @ 2019-02-19 14:04  water_lift  阅读(969)  评论(0编辑  收藏  举报