Question

Description

小明在公交车始发站上车,他应该在哪个站点下车才能最快到达学校?如果这样的站点存在多个选择距离学校最近的站点。

  • 公交车始发站位置\((0,0)\),并且以恒定的速度\(v_b\)沿着\(X\)轴正向行驶
  • 公交车有\(n\)个站点,每个站点的坐标不同,第\(i\)个站点的坐标是\((x_i,0)\)
  • 公交车在站点的停靠时间可以忽略
  • 学校的位置\((x_u,y_u)\)
  • 小明从站点下车后跑向学校的速度是\(v_s\)
  • 两点之间的距离通过欧式距离计算
  • 小明已经在公交车上了,所以他不能在第一个公交站下车
  • 小明的速度有可能比公交车的速度快

Input

第一行包含三个整数:\(2 \leq n \leq 100\),\(1 \leq v_b,v_s \leq 1000\)。第二行是\(n\)个递增的非负整数,\(x_i\)表示第\(i\)个站点的坐标,其中\(x_1\)肯定等于0并且\(x_n \leq 10^5\)。第三行两个整数表示学校的位置\(x_u,y_u\),绝对值不超过\(10^5\)。

Output

最优站点的序号

Solution

目标是\(min(\frac{s_b}{v_b} + \frac{s_s}{v_s})\),其中公交车行驶距离\(s_b\)一直在增加,小明走的距离\(s_s\)一直在减少。如果\(v_b \leq v_s\),则越早下车到达学校越快,所以这时的结果是2;否则无法直接判断在哪里下车(并不是离学校越近越好)。一开始一直希望能够找到一种比\(O(n)\)更好的解法,但是这个题只能暴力求解。

解法1

# Python
# hypot()用于计算欧式距离
# min(list)可以得到list中的最小元素
# list中的元素是tuple(耗时, 距离, 编号)
# min会首先比较耗时,然后比较距离
from math import *
n, vb, vs = map(int, input().split())
d = list(map(int, input().split()))
xu, yu = map(int, input().split())
print(min([(d[i]/vb+hypot(xu-d[i], yu)/vs, hypot(xu-d[i], yu), i+1) for i in range(1, len(d))])[2])
# 还可以使用 for i, x in enumerate(d[1:]), 其中i从0开始, 结果是i+2
// C++
// 注意int类型会溢出
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
double n, vb, vs, tmp, xu, yu;
vector<double> d;
cin >> n >> vb >> vs;
for (int i = 0; i < n; i++) {
cin >> tmp;
d.push_back(tmp);
}
cin >> xu >> yu;
double min_distance = sqrt((xu - d[1]) * (xu - d[1]) + yu * yu), min_time = d[1]/vb + min_distance/vs, index = 2;
for (int i = 2; i < n; i++) {
double distance = sqrt((xu - d[i]) * (xu - d[i]) + yu * yu);
double time = (d[i]/vb + distance/vs);
if (time < min_time) {
min_time = time;
min_distance = distance;
index = i + 1;
}
else if (time == min_time && distance < min_distance) {
min_distance = distance;
index = i + 1;
}
}
cout << index << endl;
return 0;
}

【CodeForces】9B-Running Student的更多相关文章

  1. 【Codeforces】Round #491 (Div. 2) 总结

    [Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...

  2. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  3. CodeForces - 9B - Running Student

    先上题目: B. Running Student time limit per test 1 second memory limit per test 64 megabytes   And again ...

  4. 【CodeForces】601 D. Acyclic Organic Compounds

    [题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...

  5. 【Codeforces】849D. Rooter's Song

    [算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...

  6. 【SVN】Error running context: 由于目标计算机积极拒绝,无法连接

    SVN服务没开启,步骤如下: 1.打开[控制面板]→[管理工具]→[服务]: 2.找到[visual SVN Sever],右击选择[启动]: 3.服务开启后,导入数据就成功了!

  7. 【CodeForces】983 E. NN country 树上倍增+二维数点

    [题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...

  8. 【CodeForces】925 C.Big Secret 异或

    [题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...

  9. 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块

    [题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫 ...

  10. 【CodeForces】906 D. Power Tower 扩展欧拉定理

    [题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [ ...

随机推荐

  1. 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)

    洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...

  2. 开始重学java【门头沟2017年12月6日】

    现在从struts2开始重新学习java, 想找个人一起学习java/php都可以. 学习时间大概是两个月,就是年前这段时间. 下一个阶段就是做项目进行练习.(时间为:一个月时间) 不管是学习java ...

  3. LeetCode10.正则表达式匹配 JavaScript

    给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ,而不 ...

  4. LeetCode4.寻找两个有序数组的中位数 JavaScript

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  5. 跨交换机的VLAN划分实验

    实验涉及命令以及知识补充 大部分命令和上一篇相同,本篇介绍不同的收获. 上一篇链接: https://www.cnblogs.com/Coeus-P/p/9122462.html 退出命令 ctrl+ ...

  6. SQL0668N 不允许对表XX执行操作,原因码为 "3"

    DB2 Load导入数据失败之后,表被锁,提示,SQL0668N 不允许对表XX执行操作,原因码为 "3". 之前也遇到过,当时都是现查现用的,现在在博客记一下,以备后查. 解决方 ...

  7. iframe优缺点

    优点:重载页面时不需要重载整个页面,只需要重载页面中的一个框架页(减少了数据的传输,加快了网页下载速度)

  8. Cantor表

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...

  9. Ganglia监控安装配置

    172.17.20.123 node1 gmetad.gmond.web 172.17.20.124 node2 gmond 1.服务器安装好epel源后,安装ganglia yum install ...

  10. C#判断系统是64位还是32位 支持.net4.0以前的版本

    C#判断系统是64位还是32位的时候引用了一串代码,这个代码是从园子里面其他博文中转载过来的,引入自己的项目中发现无法使用,在引用了相应的命名空间之后还是提示: "未能找到类型或命名空间名称 ...