记录编号 528098 评测结果 AWWWW
题目名称 2364.解多项式方程 最终得分 20
用户昵称 HXF 是否通过 未通过
代码语言 C++ 运行时间 0.002 s
提交时间 2019-02-27 11:06:28 内存使用 3.16 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int n,b[20],_b[20];
double a[20],_a[20],ans=3.0;
double getfx(double x){
	double f=0.0;
	for(int i=1;i<=n;i++){
		double fz=1.0;int ju=1;
		if(b[i]<0)ju=-1;
		for(int j=1;j<=ju*b[i];j++)fz*=x;
		if(ju==1)f+=fz*a[i];else f+=a[i]/fz;
	}
	return f;
}
double get_fx(double x){
	double _f=0.0;
	for(int i=1;i<=n;i++){
		double fz=1.0;int ju=1;
		if(_b[i]<0)ju=-1;
		for(int j=1;j<=ju*_b[i];j++)fz*=x;
		if(ju==1)_f+=fz*_a[i];else _f+=_a[i]/fz;
	}
	return _f;
}
int main(){
	freopen("equationsolve.in","r",stdin);
	freopen("equationsolve.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
	    scanf("%lf%d",&a[i],&b[i]);
	    _a[i]=a[i]*(double)b[i];_b[i]=b[i]-1;
	}
	if(getfx(ans)>0)while(getfx(ans)>=0.0000001){
		if(get_fx(ans)>0)ans=ans-getfx(ans)/get_fx(ans);
		else ans=ans+getfx(ans)/get_fx(ans);
	}
	else while(getfx(ans)<=0.0000001){
		if(get_fx(ans)>0)ans=ans+getfx(ans)/get_fx(ans);
		else ans=ans-getfx(ans)/get_fx(ans);
	}
	printf("%.10lf",ans);
    return 0;
}