Description
一个凸多边形的公共汽车,速度为
v
沿着
Input
第一行四个整数
n,w,v,u
,之后
n
行每行两个整数
Output
输出在不出车祸的情况下人从 (0,0) 到达 (0,w) 点最短用时,结果与精确值的相对误差及绝对误差不超过 10−6
Sample Input
5 5 1 2
1 2
3 1
4 3
3 4
1 4
Sample Output
5.0000000000
Solution
有两种情况
1.人直接以最大速度
u
走过去,用时
2.人先等车经过,这个过程中尽可能跟着车走,然后车经过后人以最大速度走完全程,此时任何一个点都可能成为人等待的那个点,等待 (xi,yi) 时用时为 xiv+w−yiu ,取最大值即可
Code
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
double w,v,u,x,y;
while(~scanf("%d%lf%lf%lf",&n,&w,&v,&u))
{
double ans=0;
int f1=1,f2=1;
while(n--)
{
scanf("%lf%lf",&x,&y);
if(x/v<y/u)f1=0;
if(x/v>y/u)f2=0;
ans=max(ans,x/v+(w-y)/u);
}
if(f1||f2)printf("%.10f\n",w/u);
else printf("%.10f\n",ans);
}
return 0;
}