欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【个人训练】(HDU2199)Can you solve this equation?

程序员文章站 2024-03-17 15:22:52
...

纯粹水题。本来想做下放松心情的,结果还是被坑了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;
}