【解题方法】比较显然的是有两种情况,一种是车还在x轴另一边的时候人就已经走过去了,一种是车完全过去了的时候人走到,那么第一种情况直接先判一下,第二种情况二分时间然后同样算一下就可以了。
【AC 代码】
#include <bits/stdc++.h>
using namespace std;
const double eps=1e-9;
const int maxn=10050;
int judge(double x){
if(x>eps) return 1;
else if(x<-eps) return -1;
else return 0;
}
double u,v,w;int n;
struct node{
double x,y;
}p[maxn];
bool check1(){
for(int i=0; i<n; i++){
if(judge(u*p[i].x-v*p[i].y)<0) return 0;
}
return 1;
}
bool check2(double t){
for(int i=0; i<n; i++){
if(judge(u*p[i].x-v*p[i].y-u*v*t)>0) return 0;
}
return 1;
}
int main()
{
cin>>n>>w>>v>>u;
for(int i=0; i<n; i++) cin>>p[i].x>>p[i].y;
//cout<<w<<" "<<u<<endl;
if(check1()){
printf("%.10f\n",1.0*w/u);
}else{
double l=0,r=2e9;
for(int i=0; i<100; i++){
double mid=(l+r)/2;
if(check2(mid)) r=mid;
else l=mid;
}
//double ans=(l+r)/2.0;
printf("%.10f\n",1.0*w/u+(l+r)/2);
}
}