終於到週末啦!小易走在市區的街道上準備找朋友聚會,突然服務器發來警報,小易需要立即回公司修復這個緊急bug。假設市區是一個無限大的區域,每條街道假設座標是(X,Y),小易當前在(0,0)街道,辦公室在(gx,gy)街道上。小易周圍有多個出租車打車點,小易趕去辦公室有兩種選擇,一種就是走路去公司,另外一種就是走到一個出租車打車點,然後從打車點的位置坐出租車去公司。每次移動到相鄰的街道(橫向或者縱向)走路將會花費walkTime時間,打車將花費taxiTime時間。小易需要儘快趕到公司去,現在小易想知道他最快需要花費多少時間去公司。
輸入描述:
輸入數據包括五行: 第一行爲周圍出租車打車點的個數n(1 ≤ n ≤ 50) 第二行爲每個出租車打車點的橫座標tX[i] (-10000 ≤ tX[i] ≤ 10000) 第三行爲每個出租車打車點的縱座標tY[i] (-10000 ≤ tY[i] ≤ 10000) 第四行爲辦公室座標gx,gy(-10000 ≤ gx,gy ≤ 10000),以空格分隔 第五行爲走路時間walkTime(1 ≤ walkTime ≤ 1000)和taxiTime(1 ≤ taxiTime ≤ 1000),以空格分隔
輸出描述:
輸出一個整數表示,小易最快能趕到辦公室的時間
輸入例子1:
2 -2 -2 0 -2 -4 -2 15 3
輸出例子1:
42思路:有三種方案去公司:
1、全程走路
2、全程出租車(當然要有出租車在當前(0,0)街道)
3、走路+出租
由於全程出租車的時間並不一定比全程走路的時間會短,所以選擇這三種方案中時間最小的即爲題解
如果當前位置有出租車,即tx[i]=ty[i]=0,此時就可以全程出租車,代碼中的walkAndTaxi其實表示了第2、3兩種情況
- 當tx[i]=ty[i]=0,即爲情況二:全程出租。(前邊的walkTime計算結果也爲0,只剩下後邊出租車的時間)
- 當tx[i]=ty[i]!=0,即爲情況三:走路+出租
package wangyiSpring_2017;
import java.util.Scanner;
/**
* @author xiaohao
* @date 創建時間:Aug 12, 2017 10:48:07 AM
* @version 1.0
*/
public class Problem_02_goToCompany {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
int tx[]=new int[n];
int ty[]=new int[n];
for(int i=0;i<n;i++)
tx[i]=sc.nextInt();
for(int i=0;i<n;i++)
ty[i]=sc.nextInt();
int gx=sc.nextInt();
int gy=sc.nextInt();
int walkTime=sc.nextInt();
int taxiTime=sc.nextInt();
System.out.println(shortTime(tx,ty, gx, gy, walkTime,taxiTime));
}
public static int shortTime(int[] tx, int[] ty, int gx, int gy, int walkTime, int taxiTime) {
// TODO Auto-generated method stub
int min=Integer.MAX_VALUE;
int len=tx.length;
for(int i=0;i<len;i++)
{
int walk=(Math.abs(gx)+ Math.abs(gy))*walkTime;
int walkAndTaxi=(Math.abs(tx[i])+ Math.abs(ty[i]))*walkTime+( Math.abs(gx-tx[i])+Math.abs(gy-ty[i]))*taxiTime;
min=Math.min(min, walk);
min=Math.min(min, walkAndTaxi);
}
return min;
}
}