• HDU-3400Line belt-三分再三分-求距离中要加esp


    传送门:Line belt

    参考:http://blog.csdn.net/hcbbt/article/details/39375763

    题意:在一个平面途中,有一条路ab,还有一条路cd;假设在ab,cd和其他地方的运动速度不同;

      求从a到d的最短时间;

    思路:三分在ab上的点,在三分cd上的点,找到对应最小的运动时间;

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <string>
    #include <cstring>
    #include <cmath>
    using namespace std;
    const double esp = 1e-6;
    
    struct node {
        double x,y;
    };
    node a,b,c,d,b2,d2;
    double ab,cd;
    double p,q,r;
    double dis(node a, node b)
    {
        return sqrt(esp+(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));//就是这里要加入esp
    }
    double get(double t)
    {
        d2.x= d.x+(c.x-d.x)/cd*t*q;
        d2.y= d.y+(c.y-d.y)/cd*t*q;
        return t + dis(b2,d2)/r;
    }
    double solve(double s)
    {
        b2.x = a.x+(b.x-a.x)/ab*s*p;
        b2.y = a.y+(b.y-a.y)/ab*s*p;
        double le=0.0,ri=cd/q;
        while(le+esp<ri)
        {
            double m1=le+(ri-le)/3;
            double m2=ri-(ri-le)/3;
            if(get(m1)<get(m2))
            {
                ri=m2;
            }
            else le = m1;
        } 
        return s+get(le);
    }
    int main(){
        //freopen("in","r",stdin);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%lf%lf%lf%lf", &a.x, &a.y, &b.x, &b.y);
            scanf("%lf%lf%lf%lf", &c.x, &c.y, &d.x, &d.y);
            scanf("%lf%lf%lf", &p, &q, &r);
            ab = dis(a, b);
            cd = dis(c, d);
            double le=0.0, ri=ab/p;
            while(le+esp<ri)
            {
                double m1=le+(ri-le)/3;
                double m2=ri-(ri-le)/3;
                if(solve(m1)<solve(m2))
                {
                    ri=m2;
                }
                else le = m1;
            } 
            printf("%.2lf
    ",solve(le));
        }
        return 0;
    }
  • 相关阅读:
    python调用函数实现数据的增删改查(1)
    VA Code编写html(1)
    python 跑服务器,访问自己制作的简单页面
    python调用函数实现数据的增删改查(2)
    VS Code编写html(2)
    python编写简单的html登陆页面(4)
    python编写简单的html登陆页面(1)
    虚拟机端口映射!
    VIM 主题管理
    Vim 窗口管理插件
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/8549709.html
Copyright © 2020-2023  润新知