题意:给出椭圆方程中的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'; } }