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. 封装方法到对象(javascript)

    /*! * artDialog 5 * Date: 2012-03-21 * http://code.google.com/p/artdialog/ * (c) 2009-2012 TangBin, ...

  2. Unity3d Gis 坐标转换

    最近在做unity3d与Gis结合的项目,最基本的就是坐标的转换问题,比如把经纬度为(166.23.9.27 , 39.55.15.74) 转换到unity里面成相应的位置点,废话不多说 上代码: u ...

  3. data-ng-click 指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. input上传图片并显示

    html: <div id="click"><img> </div><!--照片预览的div --> <div class=& ...

  5. MQTT初始篇笔记整理

    MQTT简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),基于TCP/IP 协议栈而构建,虽然叫消息队列遥测传输,但是她与消息队列毫无关系,她 ...

  6. [Windows]ping itsafe&环境变量

    (1)when you ping a computer from itsafe,the ping command should return the local IP address. (2)wind ...

  7. vue 父子组件相互传值

    子传父 逻辑: 单击子组件的按钮 ,触发它的单击事件   通过 $emit 触发父级自定义事件 并传一个值给父级 <div id="id"> <h3>儿子 ...

  8. 正则表达式之——exec,match

    刚开始接触正则,发现了一件有意思的事,我想要匹配正则,这下尴尬了- -,光知道正则表达式写法,并不知道正则如何才能获取匹配值. 慢慢摸索中... 找到答案!!! 正则匹配有两种方法: 一种是match ...

  9. 小B的询问(莫队)

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  10. 如何用hexo搭建个人博客. 亲测有效

    搭建博客: 安装node.js和git 以管理员身份进入cmd. 输入:  npm install -g cnpm --registry=https://registry.npm.taobao.org ...