题目链接

题意:给出椭圆方程中的a和b,再给出l、r,求l到r的积分的二倍。

输出时要求精度控制为保留到小数点后3位,如下代码中,eps设为1e-9 1e-8时均TLE,1e-4可以AC,1e-3会WA

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

;

int n;
double a,b,l,r;

double F(double x)
{
    -x*x/a/a);
}

double simpson(double l,double r)
{
    ;
    return (F(l)+4.0*F(m)+F(r))*(r-l)/6.0;
}

double asr(double l,double r,double eps,double A)
{
    ;
    double L=simpson(l,m),R=simpson(m,r);
    if(fabs(L+R-A)<=15.0*eps) return L+R+(L+R-A)/15.0;
    ,L)+asr(m,r,eps/,R);
}

double asr(double l,double r,double eps)
{
    return asr(l,r,eps,simpson(l,r));
}

int main()
{
    cin>>n;
    while(n--)
    {
        cin>>a>>b>>l>>r;
        cout<<)<<*asr(l,r,eps)<<'\n';
    }
}
05-15 00:45