2 条题解
-
0
G57 自适应辛普森积分【计算几何】
#include<bits/stdc++.h> using namespace std; const double eps=1e-10; double a; double f(double x) { return pow(x, a/x - x); } double simpson(double l, double r) { return (r-l)*( f(l) + f(r) + 4*f( (l+r)/2 ) )/6; } double asr(double l, double r, double ans) { double m=(l+r)/2, ls=simpson(l, m), rs=simpson(m, r); if( fabs(ls+rs-ans) < eps ) return ans; return asr(l, m, ls) + asr(m, r, rs); } int main() { freopen("a.in", "r", stdin); freopen("a.out", "w", stdout); scanf("%lf", &a); if(a < 0) {printf("orz\n"); return 0;} printf("%.5lf\n", asr(eps, 20, simpson(eps, 20)) ); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const double eps=1e-10; double a; double f(double x) { return pow(x,a/x-x); } double simpson(double l,double r) { return (r-l)*( f(l)+f(r)+4*f( (l+r)/2 ) )/6; } double asr(double l,double r,double ans) { double m=(l+r)/2,ls=simpson(l,m),rs=simpson(m,r); if( fabs(ls+rs-ans)<eps ) return ans; return asr(l,m,ls)+asr(m,r,rs); } int main() { freopen("a.in","r",stdin);freopen("a.out","w",stdout); scanf("%lf",&a); if(a<0) {printf("orz\n");return 0;} printf("%.5lf\n",asr(eps,20,simpson(eps,20) ) ); return 0; }
- 1
信息
- ID
- 493
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 30
- 已通过
- 13
- 上传者