题解 P4526 [模板]自适应辛普森法2

题面
首先丢出辛普森法公式

然后用各种画图软件得出当$a<0$发散 否则只要积分0~15就够精度了 我也不知道那个eps*15的15哪来的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;
typedef double db;
double a;
inline db F(db x) {
return pow(x, a / x - x);
}
inline db simpson(db l, db r) {
return (F(l) + F(r) + 4 * F((l + r) / 2)) * (r - l) / 6;
}
db work(db l, db r, db eps, db a) {
db mid = (l + r) / 2;
db _l = simpson(l, mid), _r = simpson(mid, r);
if(abs(_l + _r - a) <= 15 * eps) return _l + _r;
return work(l, mid, eps / 2, _l) + work(mid, r, eps / 2, _r);
}
inline db integral(db l, db r, db eps) {
if(l == r) return 0;
if(l > r) return work(r, l, eps, simpson(r, l));
return work(l, r, eps, simpson(l, r));
}
int main() {
scanf("%lf", &a);
if(a < 0) return puts("orz"), 0;
return printf("%.5f\n", integral(1e-10, 15, 1e-7)), 0;
}