记录编号 127090 评测结果 ATATA
题目名称 [NOIP 2001]一元三次方程求解 最终得分 60
用户昵称 Gravatardevil 是否通过 未通过
代码语言 C++ 运行时间 2.001 s
提交时间 2014-10-14 20:56:32 内存使用 0.32 MiB
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;

double a,b,c,d;

double ABS(double x)
{
	if(x<0) return -x;
	return x;
}

double f(int x)
{
	return (double)(a*x*x*x+b*x*x+c*x+d);
}

double found(int left,int right)
{
	if(f(left)==0) return left;
	double mid=(left+right)/2.0;
	if(ABS(f(mid)-(int)f(mid))<=0.001) return mid;
	if(f(left)*f(mid)<0) found(left,mid);
	else found(mid,right);
}

int main()
{
	freopen("3cfc.in","r",stdin);
	freopen("3cfc.out","w",stdout);
	int ans=0;
	cin>>a>>b>>c>>d;
	for(int i=-100,j=-99;i<=100&&j<=100&&ans<=3;i++,j++)
	{
		if(f(i)*f(j)<0||f(i)==0)
		{
			ans++;
			printf("%.2lf ",found(i,j));
		}
	}
	if(ans<3&&f(100)==0) printf("100.00\n");
	else printf("\n");
	return 0;
}