網易春招2017真題2——趕去公司


終於到週末啦!小易走在市區的街道上準備找朋友聚會,突然服務器發來警報,小易需要立即回公司修復這個緊急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;
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章