记录编号 |
311438 |
评测结果 |
AAAAA |
题目名称 |
[NOIP 2001]一元三次方程求解 |
最终得分 |
100 |
用户昵称 |
核糖核酸 |
是否通过 |
通过 |
代码语言 |
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;
}