洛谷 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

猜你喜欢

转载自www.cnblogs.com/Zinn/p/10141257.html
今日推荐