ZOJ - 3203——Light Bulb(三分)

题目链接:https://cn.vjudge.net/contest/277059#problem/G

题意:给出H,h,D求L.

思路;做辅助线,用相似三角形求X,然后三分。

D/x=(H-y)/h-y    L=x+y

得 L=x+(x*H-D*h)/(x-D)

三分求x即可求出答案。(注意x的取值范围)

#include<algorithm>
#include<string.h>
#include<stdio.h>
const double epx=0.001;
int t;
double H,h,D,l,r,mid;
double anser(double x)
{
    return x+(x*H-D*h)/(x-D);
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf%lf%lf",&H,&h,&D);
        l=0,r=D*h/H;
        while(r-l>epx)
        {
            mid=(l+r)/2.0;
            if(anser(mid-epx)<anser(mid+epx)) l=mid+epx;
            else r=mid-epx;
        }
        printf("%.3lf\n",anser(l));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41380961/article/details/88313141
ZOJ