| 题目 | 运输时间 |
| 难度 | 难 |
| 题目说明 | M(1<=M<=20)辆车需要在一条不能超车的单行道到达终点,起点到终点的距离为N(1<=N<=400)。速度快的车追上前车后,只能以前车的速度继续行驶。求最后一车辆到达目的地花费的时间。 注:每辆车固定间隔一小时出发,比如第一辆车0时出发,第二辆车1时出发,以此类推。 |
| 输入描述 | 第一行两个数字:M N分别代表车辆数和到终点的距离,以空格分隔。 接下来M行,每行1个数字S,代表每辆车的速度。0 |
| 输出描述 | 最后一辆车到达目的地花费的时间。 |
| 补充说明 | 无 |
| ------------------------------------------------------ | |
| 示例 | |
| 示例1 | |
| 输入 | 2 11 3 2 |
| 输出 | 5.5 |
| 说明 | 2 辆车,距离 11,0 时出发的车速度快,1 时出发的车,到达目的的花费为 5.5。 |
题目解读:
每隔 1 小时发出 1 辆车,如果后车的速度比较快,已经赶上了前车,则速度与前车保持一致。求最后一辆车,从发车到终点,需要多少时间。
分析与思路:
虽然此题难度为“难”,但思路却非常简单。
从 0 时开始,依次计算每辆车需要的时间,由于后发的车速度较快,如果后发的车赶上前车,则到达时间为前车时间减 1 。从第 1 辆车开始,一直算到最后一辆车。
时间复杂度为 O(n),空间复杂为 O(n)。
Java代码
- import java.util.Scanner;
-
- /**
- * 运输时间
- * @since 2023.09.21
- * @version 0.1
- * @author Frank
- *
- */
- public class TransportTime {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- while (sc.hasNext()) {
- String line = sc.nextLine();
- String[] cntDistance = line.split( " " );
- int count = Integer.parseInt( cntDistance[0] );
- int distance = Integer.parseInt( cntDistance[1] );
-
- String[] inputs = new String[count];
- for( int i = 0; i < count; i ++ )
- {
- inputs[i] = sc.nextLine();
- }
- processTransportTime( count, distance, inputs );
- }
- }
-
- private static void processTransportTime( int count, int distance, String inputs[] )
- {
- float minTime = 0;
- for( int i = 0; i < count; i ++ )
- {
- int speed = Integer.parseInt( inputs[i] );
- float curTime = (float) distance / speed;
- if( i == 0 )
- {
- minTime = curTime;
- continue;
- }
- if( curTime < minTime - 1 )
- {
- minTime = minTime - 1;
- }else
- {
- minTime = curTime;
- }
- }
- System.out.println( minTime );
- }
-
- }
JavaScript代码
- const rl = require("readline").createInterface({ input: process.stdin });
- var iter = rl[Symbol.asyncIterator]();
- const readline = async () => (await iter.next()).value;
- void async function() {
- while (line = await readline()) {
- var cntDistance = line.split(" ");
- var cnt = cntDistance[0];
- var distance = cntDistance[1];
-
- var speeds = new Array();
- for (var i = 0; i < cnt; i++) {
- line = await readline();
- speeds[i] = parseInt( line );
- }
- processTransportTime(distance, speeds);
- }
- }();
-
- function processTransportTime( distance,speeds) {
- var minTime = 0;
- for (var i = 0; i < speeds.length; i++) {
- var speed = parseInt(speeds[i]);
- var curTime = distance / speed;
- if (i == 0) {
- minTime = curTime;
- continue;
- }
- if (curTime < minTime - 1) {
- minTime = minTime - 1;
- } else {
- minTime = curTime;
- }
- }
- console.log(minTime);
- }
(完)