zoj 3203 Light Bulb(三分法)

来源:互联网 发布:男士 爽肤水 知乎 混合 编辑:程序博客网 时间:2024/06/09 23:38

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366

第一次接触三分法,以前还不知道,主要是昨天做编程之美时的最后一个题,他们说要用三分法,所以今天就看啦一下三分法。这个题开始时因为精度的关系一直wrong,后来把精度调到0.000000001,于是就过啦。

思想:当还没投到墙上之前,最长时的位置是影子刚好跟墙面接触,在后来的这段距离中,就是一个先增后减的函数式啦。这儿的难点就是如何表示墙上的那段长度,这时就需要用到相似三角形的知识,

就可以计算出影子在墙上的长度。

#include<cstdio>#include<iostream>#include<cmath>using namespace std;int main(){    int T;    double H,h,D;    scanf("%d",&T);    while(T--)    {        scanf("%lf%lf%lf",&H,&h,&D);        double left=(H-h)*D/H;        double right=D;        double mid,mid_v,midmid,midmid_v;        while(right-left>=0.000000001) //注意精度        {            mid=(left+right)/2;            midmid=(mid+right)/2;            mid_v=(D-mid)+H-((H-h)*D/mid);//还要加上在地面的长度D-mid            midmid_v=(D-midmid)+H-((H-h)*D/midmid);            if(mid_v>=midmid_v) right=midmid;            else left=mid;        }        printf("%.3lf\n",mid_v);    }    return 0;}


0 0
原创粉丝点击