【CodeForces】9B-Running Student
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的更多相关文章
- 【Codeforces】Round #491 (Div. 2) 总结
[Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- CodeForces - 9B - Running Student
先上题目: B. Running Student time limit per test 1 second memory limit per test 64 megabytes And again ...
- 【CodeForces】601 D. Acyclic Organic Compounds
[题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...
- 【Codeforces】849D. Rooter's Song
[算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...
- 【SVN】Error running context: 由于目标计算机积极拒绝,无法连接
SVN服务没开启,步骤如下: 1.打开[控制面板]→[管理工具]→[服务]: 2.找到[visual SVN Sever],右击选择[启动]: 3.服务开启后,导入数据就成功了!
- 【CodeForces】983 E. NN country 树上倍增+二维数点
[题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...
- 【CodeForces】925 C.Big Secret 异或
[题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...
- 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块
[题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫 ...
- 【CodeForces】906 D. Power Tower 扩展欧拉定理
[题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [ ...
随机推荐
- JavaEE权限管理系统的搭建(六)--------使用拦截器实现菜单URL的跳转权限验证和页面的三级菜单权限按钮显示
本小结讲解,点击菜单进行页面跳转,看下图,点击管理员列表后会被认证拦截器首先拦截,验证用户是否登录,如果登录就放行,紧接着会被权限验证拦截器再次拦截,拦截的时候,会根据URL地址上找到对应的方法,然后 ...
- 微信小程序【消息推送服务器认证C# WebAPI】
参考微信开发文档: https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/callback_help.html 代码可用 /// ...
- js中实现页面跳转(返回前一页、后一页)
一:JS 重载页面,本地刷新,返回上一页 代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a ...
- SpringCloud微服务实战:一、Eureka注册中心服务端
1.项目启动类application.java类名上增加@EnableEurekaServer注解,声明是注册中心 1 import org.springframework.boot.SpringAp ...
- flask中的response
1.Response 在flask中你想向前端返回数据,必须是Response的对象,这里和django必须是HttpResponse 对象一样, 主要将返回数据的几种方式 视图函数中return 字 ...
- win10家庭版升级为win10专业版
windows10 升级钥匙: DR9VN-GF3CR-RCWT2-H7TR8-82QGT 亲测可用
- 【cisco探索之路】
CISCO探索之路 show&debug&clear 1:show show version:显示版本信息show running-config:显示当前的配置show interfa ...
- vue服务端渲染添加缓存
缓存 虽然 Vue 的服务器端渲染(SSR)相当快速,但是由于创建组件实例和虚拟 DOM 节点的开销,无法与纯基于字符串拼接(pure string-based)的模板的性能相当.在 SSR 性能至关 ...
- vue服务端渲染提取css
vue服务端渲染,提取css单独打包的好处就不说了,在这里主要说的是抽取css的方法 要从 *.vue 文件中提取 CSS,可以使用 vue-loader 的 extractCSS 选项(需要 vue ...
- 10.1.5 Comment类型【JavaScript高级程序设计第三版】
注释在DOM中是通过Comment 类型来表示的.Comment 节点具有下列特征: nodeType 的值为8: nodeName 的值为"#comment": nodeValu ...