AC了,但判断边界有个地方不明白
查看原帖
AC了,但判断边界有个地方不明白
1284427
wudidepangzi楼主2024/3/17 11:41
//请直接看check函数
//<=的话,测试样例会输出-2.00 5.00 5.00
//< 的话才会输出正确结果,我想了很久并未得到答案
//问gpt也是徒劳无获,想知道其中的原因



#include <bits/stdc++.h>
using namespace std;
double a,b,c,d;
double res[3];
int cnt = 0;


bool check(double x,double r)
{
    if((a*x*x*x+b*x*x+c*x+d) * (a*r*r*r+b*r*r+c*r+d) < 0)
    //这个点非常重要,如果使用<=则会输出错误答案
    //原理不明
        return true;
    return false;
}


double bSearch(double x)
{
    double l = x , r = x+1;
    while(l+0.0001 < r)
    {
        double mid = (l+r)/2;
        if(check(mid,r))
            l = mid;
        else 
            r = mid;
    }
    return l;
}

int main()
{
    scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
    
    for(int i = -100;i<=100;i++)
    {
        if((a*i*i*i+b*i*i+c*i+d) == 0)
        {
            res[cnt] = i;
            cnt++;
            continue;
        }
        if(check(i,i+1))
        {
            res[cnt] = bSearch(i);
            cnt++;
        }
    }
    for(int i=0;i<3;i++)
        printf("%.2lf ",res[i]);
        
    return 0;
}
2024/3/17 11:41
加载中...