题意:有一个n边形的汽车向以速度v向x轴负方向移动,给出零时时其n个点的坐标。并且有一个人在(0,0)点,可以以最大速度u通过w宽的马路,到达(0,w)点。现在要求人不能碰到汽车,人可以自己调节速度。问人到达马路对面的最小时间是多少?
题解:一共有三种情况:
①. 人以最大速度u前进时,汽车的速度太慢,任意一点都到达不了人的位置
②.人以最大速度u前行时,汽车的速度太快,在人达到之前汽车的任意一点都已经通过了y轴
③.人以最大速度u前进时,会与汽车相撞,需要调整速度躲避汽车
上面三种情况,①②两种都可以直接以最大速度u通过马路。第③种1情况,我们可以在汽车对人速度影响最大的点通过时到达那个点的位置,然后全速u走到终点。
看着很麻烦,想通了就是水题啊,我真的很智障啊
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 10010
double x[maxn],y[maxn];
int main()
{
int n,i;
double w,v,u;
while(scanf("%d%lf%lf%lf",&n,&w,&v,&u)!=EOF)
{
int flag1=1,flag2=1;
double ans=0;
for(i=0;i<n;++i)
{
scanf("%lf%lf",&x[i],&y[i]);
if((x[i]/v)>(y[i]/u))
flag1=0;
if((x[i]/v)<(y[i]/u))
flag2=0;
ans=max(ans,x[i]/v+(w-y[i])/u);
}
if(flag1+flag2>0)//人以最大速度u前进,不会与车相撞
printf("%.10lf\n",w/u);
else printf("%.10lf\n",ans);
}
return 0;
}