专栏文章
B4343 [语言月赛 202506] 地铁跑酷 题解
B4343题解参与者 5已保存评论 4
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mip2hzj8
- 此快照首次捕获于
- 2025/12/03 05:05 3 个月前
- 此快照最后确认于
- 2025/12/03 05:05 3 个月前
Source & Knowledge
2025 年 6 月语言月赛,由洛谷网校入门计划/基础计划提供。
题目大意
给定 个车站和它们之间的行车时间。一些车站会短暂停留,停靠时间和停靠车站已知。你需要计算从第 站上车到第 站下车,你一共在车上花费了多少时间。需要注意的是,上下车站点的停靠时间不计入总时间,只有中间经过的停靠站才计算停靠时间。
题目分析
首先,我们来拆解总时间:总时间 = 行车时间 + 停靠时间。
1. 计算行车时间
从第 站上车,到第 站下车,列车会经过 到 , 到 到 这一系列的路段。因此,行车时间就是这些路段的时间总和。我们可以通过一个循环,从 到 遍历,累加 即可。
CPPlong long total_travel_time = 0;
for (int i = s; i < t; ++i) {
total_travel_time += a[i];
}
2. 计算停靠时间
题目中明确指出,只有中间经过的车站才计算停靠时间,即第 站和第 站的停靠时间不计入总时间。这意味着,对于每一个已知的停靠车站 ,我们都需要检查它是否在 内。如果 且 ,那么它就是一个中间经过的停靠站,其对应的停靠时间 应该被加到总时间中。
CPPlong long total_stop_time = 0;
for (int i = 1; i <= k; ++i) {
if (b[i] > s && b[i] < t) {
total_stop_time += c[i];
}
}
将这两部分时间相加,即为最终的答案。
最后, 的最大值为 。任何一个总时间都可能达到近似 ,因此需要注意使用
long long 类型来存储,以防止溢出。相关推荐
评论
共 4 条评论,欢迎与作者交流。
正在加载评论...