P2571 [SCOI2010]传送带

Posted olinr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

以上是关于P2571 [SCOI2010]传送带的主要内容,如果未能解决你的问题,请参考以下文章

P2571 [SCOI2010]传送带

P2571 [SCOI2010]传送带

P2571 [SCOI2010]传送带

P2571 [SCOI2010]传送带

bzoj1857: [Scoi2010]传送带

bzoj1857 [Scoi2010]传送带