Light Bulb ZOJ - 3203 一道三分查找的题
2017-07-18 09:34
344 查看
题意如下:
有一个高H的灯,在灯的右边D距离有一堵墙,在灯和墙之间有一个高h人,h小于H。问人的影子最多有多长。如下图求L
![](https://img-blog.csdn.net/20170718093117633?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ExMWFuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
高中物理题,相信学霸可以用公式退出来,不过也会挺费事。我们用三分查找可以轻松求解。
首先我们要证明影子随着人向右走,是一个先增后减的单峰函数。 这个是常识 0.0 。大致推理一下,如果没有墙 ,影子是越来越长的,有了墙,使得本该极长的影子,有了上限人的高度。 可能服从单峰函数,当然不一定是真的,然后我们写出求影长的公式 f(x) ,一不小心发现确实是单峰函数,然后果断三分查找啊,
挺简单的对吧
里面有个很蛋疼的地方,三分区间不能从零开始,我 wrong 了好几次就是因为0。感觉可能是f(x)的一些原因,但谁知道呢
有一个高H的灯,在灯的右边D距离有一堵墙,在灯和墙之间有一个高h人,h小于H。问人的影子最多有多长。如下图求L
高中物理题,相信学霸可以用公式退出来,不过也会挺费事。我们用三分查找可以轻松求解。
首先我们要证明影子随着人向右走,是一个先增后减的单峰函数。 这个是常识 0.0 。大致推理一下,如果没有墙 ,影子是越来越长的,有了墙,使得本该极长的影子,有了上限人的高度。 可能服从单峰函数,当然不一定是真的,然后我们写出求影长的公式 f(x) ,一不小心发现确实是单峰函数,然后果断三分查找啊,
#include<cstdio> #include<algorithm> #include<cmath> #include<iostream> using namespace std; const double esp=0.00000001; double H,h,d; //这里是f(x) 一个单峰函数 凸的, double f(double x){ // H/h=(x+a)/a;相似三角形 double a= (h*x)/(H-h);//如果没有墙时的影长 if(a>d-x){//如果墙上有影子 double b= (a-(d-x))/a*h;//墙上影子的长度 a=a-(a-(d-x))+b;//影子的总长度 } return a; } //这里是三分的内容 double oneThird(double l,double r){ while(r-l>esp){ double mid=l+(r-l)/2; double mmid=mid+(r-mid)/2; if(f(mid)>f(mmid)){ r=mmid; } else l=mid; } return l; } int main(){ int t; scanf("%d",&t); while(t--){ scanf("%lf%lf%lf",&H,&h,&d); printf("%.3lf\n",f( oneThird(0.01,d) ) ); } return 0; }
挺简单的对吧
里面有个很蛋疼的地方,三分区间不能从零开始,我 wrong 了好几次就是因为0。感觉可能是f(x)的一些原因,但谁知道呢
相关文章推荐
- ZOJ 3203 Light Bulb 三分查找
- Zoj 3203 Light Bulb (三分查找)
- ZOJ - 3203 三分 Light Bulb 详细题解
- ZOJ 3203 Light Bulb——(三分求极值)
- ZOJ 3203 Light Bulb【三分】
- zoj 3203 Light Bulb(三分)
- 三分 --- ZOJ 3203 Light Bulb
- ZOJ 3203 Light Bulb (三分+计算几何)
- ZOJ 3203-Light Bulb(三分)
- ZOJ 3203 Light Bulb (三分)
- zoj 3203 Light Bulb (三分)
- ZOJ 3203 Light Bulb (三分算法)
- 大三分法ZOJ 3203 Light Bulb
- zoj 3203 Light Bulb 三分,求凸函数的最大值
- ZOJ 3203 Light Bulb 三分
- ZOJ 3203 Light Bulb【数学推导&三分】
- ZOJ-3203-Light Bulb【6th浙江省赛】【数学公式】【三分】
- ZOJ 3203 Light Bulb--三分
- ZOJ - 3203 Light Bulb (数学公式,或者,三分)
- ZOJ 3203-B - Light Bulb-三分