zoukankan      html  css  js  c++  java
  • P2571 [SCOI2010]传送带

    题意:在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。

      两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,

      在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,

      他想知道最少需要走多长时间

    这貌似是物理题

    第一道三分题,还是三分套三分(厉害了~~)

    对AB,CD分别三分,求距离更新答案

    因为判不了大小关系,取cnt=50来多次三分(足够了)

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cmath>
    using namespace std;
    #define love_nmr 0
    int ax,ay,bx,by;
    int cx,cy,dx,dy;
    int p,q,R;
    inline double dis(double x,double y,double xx,double yy)
    {
        return sqrt((xx-x)*(xx-x)+(yy-y)*(yy-y));
    }
    struct node
    {
        double x,y;
    };
    inline double juli(node t)
    {
        double diss=dis(ax,ay,t.x,t.y);
        node l,r;
        l.x=cx;
        l.y=cy;
        r.x=dx;
        r.y=dy;
        double ans=0;
        int cnt=50;
        while(cnt--)
        {
            node mid1,mid2;
            mid1.x=(l.x+(r.x-l.x)/3.0);
            mid1.y=(l.y+(r.y-l.y)/3.0);
            mid2.x=(r.x-(r.x-l.x)/3.0);
            mid2.y=(r.y-(r.y-l.y)/3.0);
            double tot1=diss/(double)p+dis(t.x,t.y,mid1.x,mid1.y)/(double)R+dis(mid1.x,mid1.y,dx,dy)/(double)q;
            double tot2=diss/(double)p+dis(t.x,t.y,mid2.x,mid2.y)/(double)R+dis(mid2.x,mid2.y,dx,dy)/(double)q;
            if(tot1>tot2)
            {
                ans=tot2;
                l.x=mid1.x;
                l.y=mid1.y;
            }       
            else
            {
                ans=tot1;
                r.x=mid2.x;
                r.y=mid2.y;
            }
        }
        return ans;
    }
    int main()
    {
        scanf("%d%d%d%d%d%d%d%d%d%d%d",&ax,&ay,&bx,&by,&cx,&cy,&dx,&dy,&p,&q,&R);
        node l,r;
        l.x=ax;
        l.y=ay;
        r.x=bx;
        r.y=by;
        double ans=0;
        int cnt=50;
        while(cnt--)
        {
            node mid1,mid2;
            mid1.x=(l.x+(r.x-l.x)/3.0);
            mid1.y=(l.y+(r.y-l.y)/3.0);
            mid2.x=(r.x-(r.x-l.x)/3.0);
            mid2.y=(r.y-(r.y-l.y)/3.0);
            double tot1=juli(mid1);
            double tot2=juli(mid2);
            if(tot1>tot2)
            {
                ans=tot2;
                l.x=mid1.x;
                l.y=mid1.y;
            }       
            else
            {
                ans=tot1;
                r.x=mid2.x;
                r.y=mid2.y;
            }
        }
        printf("%.2lf",ans);
        return love_nmr;
    }
  • 相关阅读:
    maven
    ELK
    gitlab 升级
    平安工作流程
    平安云应用场景
    nginx基于uwsgi部署Django (单机搭建)
    ansible
    nginx理论
    GIT
    docker(三)
  • 原文地址:https://www.cnblogs.com/olinr/p/9436480.html
Copyright © 2011-2022 走看看