题解 CF9B 【Running Student】
TRZ_2007
2020-11-14 12:43:52
**题解 [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;
}
```