码迷,mamicode.com
首页 > 其他好文 > 详细

P2571 [SCOI2010]传送带

时间:2018-08-07 14:00:31      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:printf   移动   scanf   can   题意   div   iss   style   速度   

题意:在一个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;
}

 

P2571 [SCOI2010]传送带

标签:printf   移动   scanf   can   题意   div   iss   style   速度   

原文地址:https://www.cnblogs.com/olinr/p/9436480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!