zoukankan      html  css  js  c++  java
  • LA3485 Bridge[(辛普森自适应)微积分]

    做此题完全是为了练积分。

    【普通求导版】

     Select Code

    #include<cstdio>
    #include<cmath>
    using namespace std;
    typedef double real;
    const real eps=1e-5;
    int cas,Cas,D,H,B,L;
    real F(real a,real x){
    	real a2=a*a;
    	real x2=x*x;
    	return (x*sqrt(a2+x2)+a2*log(fabs(x+sqrt(a2+x2))))/2.0;
    }
    real calc(real w,real h){
    	real a=4.0*h/(w*w);
    	real A=1.0/(2.0*a);
    	return (F(A,w/2.0)-F(A,0))*4.0*a;
    }
    int main(){
    	for(scanf("%d",&cas);cas--;){
    		scanf("%d%d%d%d",&D,&H,&B,&L);
    		int n=(B+D-1)/D;
    		real D1=(real)B/n;
    		real L1=(real)L/n;
    		real l=0.0,r=H,mid;
    		while(l+eps<r){
    			mid=(l+r)/2.0;
    			if(calc(D1,mid)<L1) l=mid;else r=mid;
    		}
    		printf("Case %d:
    %.2lf
    ",++Cas,H-l);
    		if(cas) putchar('
    ');
    	}
    	return 0;
    }

    【辛普森自适应版】

     Select Code

    #include<cstdio>
    #include<cmath>
    using namespace std;
    typedef double real;
    const real eps=1e-5;
    int cas,Cas,D,H,B,L;
    real a;
    real F(real x){
    	real a2=a*a;
    	real x2=x*x;
    	return sqrt(1.0+4.0*a2*x2);
    }
    real simpson(real a,real b){
    	real c=(a+b)/2.0;
    	return (F(a)+4.0*F(c)+F(b))*(b-a)/6.0;
    }
    real asr(real a,real b,real eps,real A){
    	real c=(a+b)/2.0;
    	real L=simpson(a,c),R=simpson(c,b);
    	if(fabs(L+R-A)<=15*eps) return L+R+(L+R-A)/15;
    	return asr(a,c,eps/2,L)+asr(c,b,eps/2,R);
    }
    real asr(real a,real b,real eps){
    	return asr(a,b,eps,simpson(a,b));
    }
    real calc(real w,real h){
    	a=4.0*h/(w*w);
    	return asr(0,w/2.0,eps)*2.0;
    }
    int main(){
    	for(scanf("%d",&cas);cas--;){
    		scanf("%d%d%d%d",&D,&H,&B,&L);
    		int n=(B+D-1)/D;
    		real D1=(real)B/n;
    		real L1=(real)L/n;
    		real l=0.0,r=H,mid;
    		while(l+eps<r){
    			mid=(l+r)/2.0;
    			if(calc(D1,mid)<L1) l=mid;else r=mid;
    		}
    		printf("Case %d:
    %.2lf
    ",++Cas,H-l);
    		if(cas) putchar('
    ');
    	}
    	return 0;
    }
  • 相关阅读:
    10 个雷人的注释,就怕你不敢用!
    Java 14 之模式匹配,非常赞的一个新特性!
    poj 3661 Running(区间dp)
    LightOJ
    hdu 5540 Secrete Master Plan(水)
    hdu 5584 LCM Walk(数学推导公式,规律)
    hdu 5583 Kingdom of Black and White(模拟,技巧)
    hdu 5578 Friendship of Frog(multiset的应用)
    hdu 5586 Sum(dp+技巧)
    hdu 5585 Numbers
  • 原文地址:https://www.cnblogs.com/shenben/p/6653567.html
Copyright © 2011-2022 走看看