「个人训练」Can you solve this equation?(HDU-2199)

题意与分析

纯粹水题。本来想做下放松心情的,结果还是被坑了qaq
重点就是在浮点误差。比较左右的下次就直接上1e-10,别看着题目说1e-4然后给个-5,结果暴wa。气傻了。。。。。

代码

#include <bits/stdc++.h>
#define PB push_back
#define MP make_pair

using namespace std;
#define NQUICKIO
#define NFILE
double xs[]={6,3,2,7,8};
int main()
{
#ifdef QUICKIO
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
#endif
#ifdef FILE
    freopen("datain.txt","r",stdin);
    freopen("dataout.txt","w",stdout);
#endif
    int T; cin>>T;
    while(T--)
    {
        double y; cin>>y;
        xs[0]=6-y;
        double l=0,r=100;
        if(double(6-y)*(807020306-y)>=1e-8) cout<<"No solution!"<<endl;
        else
        {
            do
            {
                double mid=(l+r)/2;
                double ans=0;
                for(int i=4;i>=0;--i)
                {
                    ans*=mid;
                    ans+=xs[i];
                }
                //cout<<mid<<" "<<ans<<endl;
                if(ans<0) l=mid;
                else r=mid;
            }
            while(!(fabs(r-l)<1e-10));// 1e-5 before
            cout<<fixed<<setprecision(4)<<(l+r)/2.0<<endl;
        }
    }
    return 0;
}
如非注明,原创内容遵循GFDLv1.3发布;其中的代码遵循GPLv3发布。
原文地址:https://www.cnblogs.com/samhx/p/HDU-2199.html