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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值