记录编号 409866 评测结果 AAAAA
题目名称 [NOIP 2001]一元三次方程求解 最终得分 100
用户昵称 Gravatar爆零自动机 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2017-05-29 17:35:09 内存使用 0.31 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <istream>
#include <climits> 
#include <string>
#include <set>
#include <list>
#include <map>
#include <cmath>
#define eps 0.0005
using namespace std;


double l,r;
double f(double x); 
int t;
double a,b,c,d;
double ask(double l,double r);

int main()
{
	freopen("3cfc.in","r",stdin);
	freopen("3cfc.out","w",stdout);
	
	scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
	
	for(double i=-100; i<100; i++)
	{
		if(f(i)==0)
			printf("%.2lf ",i);
		else if(f(i)*f(i+1)<0)
		{
			l=i; r=i+1;
			printf("%.2lf ",ask(l,r));
		}
	}

	puts("");
	
	return 0;
}
double f(double x)
{
	return a*x*x*x+b*x*x+c*x+d;
}
double ask(double l,double r)
{
	double mid=(l+r)/2;
	if(abs(f(mid))<=eps) return mid;

	if(f(l)*f(mid)<=0)
		return ask(l,mid);
	else
		return ask(mid,r);
}