题目描述
从小明家所在公交站出发有n路公交到公司,现给出每路公交的停站数(不包括起点和终点),及每次停的时间(一路车在每个站停的时间相同)和发车的间隔,先假定每辆车同时在相对时间0分开始发车,且所有车在相邻两个站之间的耗时相同,都为5分钟。给定小明起床的相对时间(相对0的分钟数),请计算他最早到达公司的相对时间。
给定每路车的停站数stops,停站时间period,发车间隔interval及公交路数n,出发时间s。请返回最早到达时间。保证公交路数小于等于500,停站数小于等于50。
代码如下:
1 package com.yzh.hehe; 2 3 import java.util.Scanner; 4 5 6 public class TakeBusChooseLine { 7 8 public static void main(String[] args) { 9 Scanner scanner=new Scanner(System.in); 10 // "[13,15,26,7,27,3,30],[1,2,1,2,2,2,1],[5,1,4,3,2,1,4],7,10" 11 while (scanner.hasNext()) { 12 13 String string=scanner.nextLine(); 14 // String string1="\"[13,15,26,7,27,3,30],[1,2,1,2,2,2,1],[5,1,4,3,2,1,4],7,10\""; 15 // String string2="[13,15,26,7,27,3,30],[1,2,1,2,2,2,1],[5,1,4,3,2,1,4],7,10"; 16 String[] sArr=string.split("]"); 17 int n=Integer.parseInt(sArr[3].split(",")[1]); 18 string=sArr[3].split(",")[2]; 19 int s=Integer.parseInt(string.substring(0, string.length()-1)); 20 String[] stopStrings=sArr[0].substring(2).split(","); 21 String[] periodStrings=sArr[1].substring(2).split(","); 22 String[] intervalStrings=sArr[2].substring(2).split(","); 23 int[] stops=new int[n],period=new int[n],interval=new int[n]; 24 for (int i = 0; i < n; i++) { 25 stops[i]=Integer.parseInt(stopStrings[i]); 26 period[i]=Integer.parseInt(periodStrings[i]); 27 interval[i]=Integer.parseInt(intervalStrings[i]); 28 29 } 30 System.out.println(takeBusChooseLine(stops, period, interval, n, s)); 31 32 } 33 scanner.close(); 34 35 } 36 37 /* 38 * 三部分组成: 等待上车时间(interval[i]-s%interval[i]);车站停靠时间(stops[i]*period[i]);路上行动时间((stops[i]+1)*5),根据贪心原则三者时间和最短者最先到公司,记得结果要加上起床时的相对时间 39 */ 40 private static int takeBusChooseLine(int[] stops, int[] period, int[] interval, int n, int s) { 41 int kaishi=interval[0]-s%interval[0]; 42 43 int shortest=(kaishi==interval[0]?0:kaishi)+stops[0]*period[0]+(stops[0]+1)*5;; 44 int temp=0; 45 for (int i = 1; i < n; i++) { 46 kaishi=interval[i]-s%interval[i]; 47 temp=(kaishi==interval[i]?0:kaishi)+stops[i]*period[i]+(stops[i]+1)*5; 48 shortest=shortest>temp?temp:shortest; 49 } 50 return shortest+s; 51 } 52 }
浙公网安备 33010602011771号