题解 CF9B 【Running Student】

TRZ_2007

2020-11-14 12:43:52

Solution

**题解 [CF9B 【Running Student】](https://www.luogu.com.cn/problem/CF9B)** # Solution 对于每一个点,我们枚举是否下车,计算各种距离取最小值即可,时间复杂度 $\mathcal{O(n)}$。 画一个图: ![](https://cdn.luogu.com.cn/upload/image_hosting/gzph7csm.png) 通过图可以看出,应该在二号站点下车。 **几个坑点** - 1:他不能在起点下车,所以枚举时应该从2(即图中站点1)开始枚举。 - 2:如果有多个满足的下车地点,请输出离考试地点最近的一个。所以我们需要存下离站点最近的点进行比对。 # Code ```cpp #include <bits/stdc++.h> using namespace std; const int N = 109; double dis[N],x[N],u,v,ans,ansd; int n,v1,v2,cnt; int main() { scanf("%d %d %d",&n,&v1,&v2); for(int i = 1;i <= n;i++) { scanf("%lf",x + i); } scanf("%lf %lf",&u,&v); for(int i = 1;i <= n;i++) { dis[i] = sqrt((u - x[i]) * (u - x[i]) + v * v); } ans = 1e9 + 10; ansd = 1e9 + 10; for(int i = 2;i <= n;i++) { if(ans >= dis[i] / v2 + x[i] / v1 && ansd > dis[i]) { ans = dis[i] / v2 + x[i] / v1; ansd = dis[i]; cnt = i; } } printf("%d\n",cnt); return 0; } ```