zoukankan      html  css  js  c++  java
  • UVALive-7198 Tall orders 微积分 二分

    题目链接:https://cn.vjudge.net/problem/UVALive-7198

    题意

    有悬链线方程$ f(x)=a cdot cosh(frac{s}{a}) $,
    现有两个电线杆高p,水平距离d,上有电线。
    这两个电线杆之间要通火车,这要求电线曲线最低点要离地面高4.2m。
    给出p, d问电线长度L最长多少?

    思路

    简单积分题。
    首先当然把参数a求出来,这里参数a只能是规定曲线的宽窄(很多人觉得a就是地面距最低点的距离,然而这俩没关系)。
    有这样的方程:$ 4.2=p+a-a cdot cosh(frac{d}{2a}) $
    有了这个方程就可以求a了,为了方便求a,我们可以研究一下函数关于a的单调性。
    直接输出值看看得是单调就完事了,但是为了严谨,比赛结束求一下还是好的。
    单调函数,这个a二分就好了。

    电线长度就只能积分求解:

    [egin{aligned} & 2int^{frac{d}{2}}_{0} sqrt{dx^2+dy^2} \ & =2int^{frac{d}{2}}_{0} sqrt{1+(frac{dy}{dx})^2} dx\ & =int^{frac{d}{2}}_{0} sqrt{4+(e^{frac{x}{a}}-e^{-frac{x}{a}})^2} dx\ & =int^{frac{d}{2}}_{0} e^{-frac{x}{a}} sqrt{e^{frac{4x}{a}}+2e^{frac{2x}{a}}+1} dx \ & =int^{frac{d}{2}}_{0} e^{frac{x}{a}}+e^{-frac{x}{a}} dx \ & =a(e^{frac{d}{2a}}-e^{-frac{d}{2a}}) end{aligned} ]

    其中最后一步猜都可以猜出来,高中生水平做这个应该没有大问题。
    (当年高二手推悬链线方程-_-,学校里写的研究报告到现在还没有进行评奖...)

    提交过程

    WA 注意向下取整
    AC

    代码

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    const double eps2=1e-6, eps=1e-8;
    double p, d;
    bool equal(double a, double b){
    	return (a-b)<eps && (b-a)<eps;
    }
    
    double func(double a){
    	return a+p-a*cosh(d/(2*a));
    }
    
    double func2(double a){
    	return a*(exp(d/(2*a))-exp(-1*d/(2*a)));
    }
    
    double solve(void){
    	double l=1, r=1e4;
    
    	while (l<r){
    		double mid=(l+r)/2;
    		if (func(mid)<4.2) l=mid;
    		else r=mid;
    
    		if (r-l<eps2) return r;
    	}
    }
    
    int main(void){
    	while (scanf("%lf", &p)==1){
    		if (equal(p, -1)) break;
    		scanf("%lf", &d);
    
    		double a=solve();
    		printf("%0.3lf
    ", floor((func2(a)*1000))/(double)1000);
    	}
    
    	return 0;
    }
    
    Time Memory Length Lang Submitted
    None None 835 C++ 5.3.0 2018-08-20 03:38:48
  • 相关阅读:
    SUSE10 SP2/SP3 无规律死机故障解决
    随机铃声
    linux添加开机启动项
    SUSE Linux ShutdownManager issue
    linux添加开机启动项
    两个正在运行的activity之间的通信
    android 获取屏幕大小
    Linux开机启动过程分析
    grid的宽度设为100%问题
    动态处理editGridPanel
  • 原文地址:https://www.cnblogs.com/tanglizi/p/9513450.html
Copyright © 2011-2022 走看看