HDU

来源:互联网 发布:网络红人毒药身世 知乎 编辑:程序博客网 时间:2024/06/11 17:45

题目链接:Can you solve this equation?

题目大意:多项式求根,精确到10-4,数据范围是0到100

思路:很明显该多项式在0到100是递增的,故可以用零点逼近法,先求出多项式的最大值和最小值,然后在这个区间二分搜索,直到满足精度为止

AC代码:

#include<iostream>#include<cstdio>#include<cmath>using namespace std;double x,y;double f(double x){    return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;}double branch(double l,double r){    double y1=f(l)-y, y2=f(r)-y;    if(y1>0 || y2<0) return -1;    else{    double mid;    while(l<=r)    {        mid=(l+r)/2;        if(fabs(y1-y2)<1e-4) return mid;        if(f(mid)>y) {r=mid;y2=f(r)-y;}        else {l=mid;y1=f(l)-y;}    }    }    return -1;}int main(){    int t;    cin>>t;    while(t--)    {        cin>>y;        if(branch(0,100)==-1) cout<<"No solution!"<<endl;        else printf("%.4f\n",branch(0,100));    }    return 0;}
原创粉丝点击