给你一个凸多边形的车,一条街宽w(y=0,y=w之间),你站在(0,0)可以以u速度往上走,车可以以v的速度往x轴负方向走,问你最少要多久你才能跨过这条街。在这个多边形的边上和顶点上不算被撞。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10005;
const double eps=1e-6;
int n;
double w,v,u;
typedef pair<double,double> pa;
pa a[MAXN];
double k;
bool judge(double x){
int tot1=0,tot2=0;
for(int i=1;i<=n;i++){
if(a[i].first-k*a[i].second+k*x<eps) tot1++;
else tot2++;
if(tot1&&tot2) return false;
}
return true;
}
int main(){
scanf("%d%lf%lf%lf",&n,&w,&v,&u);
double mx=0;
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].second,&a[i].first);
mx = mx<a[i].second?a[i].second:mx;
}
k=u/v;
double l=0,r=mx;
if(judge(0.0)){
printf("%.10lf\n",w/u);
return 0;
}
double mid,ans;
while(r-l>eps){
mid=(r+l)/2;
if(judge(mid)){
r=mid;
}
else l=mid;
}
printf("%.10lf\n",mid/v+w/u);
return 0;
}
Chris and Road CodeForces - 703C 【几何 贪心 二分】
原文:https://www.cnblogs.com/xuwanwei/p/12835408.html