洛谷 P4525 & P4526 [模板] 自適應辛普森積分
阿新 • • 發佈:2018-12-19
題目:https://www.luogu.org/problemnew/show/P4525
https://www.luogu.org/problemnew/show/P4526
學習辛普森積分:https://blog.csdn.net/VictoryCzt/article/details/80660113
程式碼如下:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define eps 1e-8 using namespace std; typedefP4525double db; db a,b,c,d,L,R; db f(db x){return (c*x+d)/(a*x+b);} db simp(db a,db b){return (b-a)/6*(f(a)+4*f((a+b)/2)+f(b));} db asr(db l,db r,db lst) { db mid=(l+r)/2; db ls=simp(l,mid),rs=simp(mid,r); if(fabs(ls+rs-lst)<eps)return ls+rs; else return asr(l,mid,ls)+asr(mid,r,rs); } db asme(db l,db r){return asr(l,r,simp(l,r));} int main() { scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&L,&R); printf("%.6f\n",asme(L,R)); return 0; }
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define eps 1e-8 using namespaceP4526std; typedef double db; db a; db f(db x){return pow(x,a/x-x);} db simp(db l,db r){return (r-l)/6*(f(l)+4*f((l+r)/2)+f(r));} db asr(db l,db r,db lst) { db mid=(l+r)/2; db ls=simp(l,mid),rs=simp(mid,r); if(fabs(ls+rs-lst)<eps)return ls+rs; return asr(l,mid,ls)+asr(mid,r,rs); } db asme(db l,db r){return asr(l,r,simp(l,r));} int main() { scanf("%lf",&a); if(a<0){puts("orz"); return 0;} printf("%.5f\n",asme(eps,15)); return 0; }