題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1724
AC代碼:
#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
double a,b;
double ll,rr;
double eps=1e-5;//eps精度具體參考題目精度要求
double f(double x){//f函數具體看題目給的表達式
return b*sqrt(1.0-x*x/(a*a));
}
//辛普森模板
double simpson(double a,double b){
double c=(a+b)/2.0;
return (f(a)+4*f(c)+f(b))*(b-a)/6.0;
}
double intergral(double l,double r,double Eps){
double mid=(r+l)/2.0;
double sl=simpson(l,mid),sr=simpson(mid,r),sm=simpson(l,r);
if(fabs(sl+sr-sm)<=15*Eps){
return sl+sr+(sl+sr-sm)/15.0;
}
return intergral(l,mid,Eps/2.0)+intergral(mid,r,Eps/2.0);
}
int main()
{
int t;
cin>>t;
while(t--){
cin>>a>>b>>ll>>rr;
printf("%.3lf\n",2.0*intergral(ll,rr,eps));
}
return 0;
}