1. 程式人生 > >洛谷 P4525 & P4526 [模板] 自適應辛普森積分

洛谷 P4525 & P4526 [模板] 自適應辛普森積分

題目: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;
typedef 
double 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; }
P4525
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define eps 1e-8
using namespace
std; 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; }
P4526