2 条题解

  • 0
    @ 2025-10-8 16:50:53

    G57 自适应辛普森积分【计算几何】

    #include <bits/stdc++.h>
    using namespace std;
    const double eps = 1e-10;
    double a, b, c, d, L, R;
    
    double f(double x) {
        return (c * x + d) / (a * x + b);
    }
    
    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() {
        scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &L, &R);
        printf("%.6lf\n", asr(L, R, simpson(L, R)));
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:50:40

      G57 自适应辛普森积分【计算几何】

      #include<bits/stdc++.h>
      using namespace std;
      const double eps=1e-10;
      double a,b,c,d,L,R;
      double f(double x)
      {
      	return (c*x+d)/(a*x+b);
      }
      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()
      {
      	scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&L,&R);
      	printf("%.6lf\n",asr(L,R,simpson(L,R)) ); 
      	return 0;
      }
      • 1

      G57_2 自适应辛普森积分【计算几何】*自适应辛普森法 1[P4525]

      信息

      ID
      492
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      30
      已通过
      16
      上传者