HDU 1724【自適應辛普森公式】

題目鏈接: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章