(第一次写题解望大家见谅)
作为一个蒟蒻一开始真的感觉这题好复杂,但经过学长的点拨,真的是云开见雾,发现这是一道极其简单的——数学题,正好用坐标轴去理解。我们可将车视为基准物,而车的左移对于人来说就是右移,而人本身就要上移,因此,若将车看成静止的话,就是人在向右上移,从原点开始向右上移,就可将人的路径看成是一条经过原点的直线,要使其不被车撞到,即将直线让原点旋转,与车接触的第一个点的斜率与人和车的速率比进行比较,如图(听说要用图床传图就放弃了)的两条直线,即为对应的关系。
这是一开始画的,本来没看见横坐标有负的情况这是存在横坐标为负的情况
注意:1、测试数据中有横坐标为负的值!!! 因此因找到最低点进行判断与寻找
最后ac是考虑了x为负时,人必不可能冲,必须得等车过去了才能走(测试数据41那里卡了好久)
(真的卡了好久。。。cf上的数据异常刁钻)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<set>
#include<cstdlib>
#include<algorithm>//头文件没有都用
using namespace std;
int main()
{
int n;
double u,v,w;
while(~scanf("%d%lf%lf%lf",&n,&w,&v,&u))//'~'这个其实和"!=EOF"一样
{
bool ok=false,okk=false,f=false;//f标记是否车上有点在左侧
double x,y,ans=0;
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&x,&y);
if(x<0) f=true;
if(y/x>u/v) ok=true;
if(y/x<u/v) okk=true;
if(x/v+(w-y)/u>ans) ans=x/v+(w-y)/u;
}
if(ok&&okk||f) printf("%.10lf\n",ans);
else printf("%.10lf\n",w/u);
}
}
(打题解不易(虽说不多),不喜吻喷,谢谢大家嘞!)