XTU-1175 Hurry Up

http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1175

题意:GG要尽快回到家,但是有两种选择,一种是恒以速度vr以直线跑到家,一种先跑到公路搭车(x轴)然后以vt的速度直线回家,问所需的最小时间。

思路:首先可以求出s1,表示GG跑回家所需的时间,但是如果乘车,显然要选一个最优点,并且选的点不同所需的时间也不同,显然是一条开口向上的抛物线,那么我们可以三分求出这个最优点。

#include<cstdio>
#include<cmath>
#include<algorithm>
#define E 1e-10//注意要取一个精度
using namespace std;
double x1,x2,y11,y2,vr,vt;
double solve(double x)  //第二种方式,先跑步在乘车 总共需要的时间
{
    return sqrt((x1-x)*(x1-x)+y11*y11)/vr+sqrt((x2-x)*(x2-x)+y2*y2)/vt;
}
double fun()
{
     double low,high,mid,midd;
     if(x1>x2) swap(x1,x2);
     low=x1,high=x2;
     while(low+E<high)  //不能直接相等
     {
            mid=(low+high)/2;
            midd=(mid+high)/2;
            double v1=solve(mid);
            double v2=solve(midd);
            if(v1<=v2)
            {
                high=midd;
            }
            else low=mid;
     }
     return solve(low);
}
int main()
{
    int t,i,j;
    double s,s1;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf%lf%lf%lf%lf%lf",&x1,&y11,&x2,&y2,&vr,&vt);
        s=sqrt((x1-x2)*(x1-x2)+(y11-y2)*(y11-y2))/vr;
        s1=fun();
        printf("%.2lf\n",s<s1?s:s1);
    }
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值