记录编号 311438 评测结果 AAAAA
题目名称 [NOIP 2001]一元三次方程求解 最终得分 100
用户昵称 Gravatar核糖核酸 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2016-09-24 16:19:13 内存使用 0.29 MiB
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define dd 0.001
using namespace std;
double a, b, c, d, l, r;
double ans[5];
int get = 0;

inline double fun(double x) {
	return a*x*x*x+b*x*x+c*x+d;
}

double Half(double l, double r) {
	//printf("l=%.2lf r=%.2lf\n", l, r);
	while((r-l) > dd) {
		double mid = (r+l)/2;
		if(fun(mid) == 0) return mid;
		double f = fun(mid);
		if(fun(l)*fun(mid) < 0) r = mid;
		else l = mid;
	}
	return l;
}

void Get_ans() {
	l=-100; r = -99;
	while(r <= 100) {
		r = r+0.5; l = l+0.5;
		if(fun(l)*fun(r) < 0) {
			ans[++get] = Half(l,r);
			if(ans[get]==ans[get-1]) get--;
		}
		if(get >= 3) break;
	}
}

int main() {
	freopen("3cfc.in","r",stdin);
	freopen("3cfc.out","w",stdout);
	scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
	Get_ans();
	for(int i=1; i<=get; i++) printf("%.2lf ", ans[i]);
	fclose(stdin); fclose(stdout);
	return 0;
}