題目連接php
題意:給出橢圓方程中的a和b,再給出l、r,求l到r的積分的二倍。c++
輸出時要求精度控制爲保留到小數點後3位,以下代碼中,eps設爲1e-9 1e-8時均TLE,1e-4能夠AC,1e-3會WAspa
代碼:code
#include<bits/stdc++.h> using namespace std; typedef long long LL; const double eps=1e-4; int n; double a,b,l,r; double F(double x) { return b*sqrt(1-x*x/a/a); } double simpson(double l,double r) { double m=(l+r)/2; return (F(l)+4.0*F(m)+F(r))*(r-l)/6.0; } double asr(double l,double r,double eps,double A) { double m=(l+r)/2; 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; return asr(l,m,eps/2,L)+asr(m,r,eps/2,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<<fixed<<setprecision(3)<<2*asr(l,r,eps)<<'\n'; } }