存个模板。

luogu4525

计算积分。结果保留至小数点后6位。

double a,b,c,d,l,r;
inline double f(double x)     //原函数
{
    return (c*x+d)/(a*x+b);
}
inline double simpson(double l,double r)     //Simpson公式
{
    double mid=(l+r)/2;
    return (f(l)+4*f(mid)+f(r))*(r-l)/6;
}
double asr(double l,double r,double eps,double ans)
{
    double mid=(l+r)/2;
    double l_=simpson(l,mid),r_=simpson(mid,r);
    if(fabs(l_+r_-ans)<=15*eps) return l_+r_+(l_+r_-ans)/15;     //确认精度
    return asr(l,mid,eps/2,l_)+asr(mid,r,eps/2,r_);     //精度不够则递归调用
}
inline double asr(double l,double r,double eps)
{
    return asr(l,r,eps,simpson(l,r));
}
int main()
{
    scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&l,&r);
    printf("%.6lf",asr(l,r,1e-6));
    return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

HDU6430 树上启发式合并/线段树合并 Previous
奇技淫巧 Next