2012年6月24日日曜日

TopCoder SRM400 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。

あなたは休日に街の中を歩いている。すると突然、上司から携帯電話でできるだけ速く職場に来いという命令が届いた。街の大きさは無限であり、南北方向に道路がXの間隔で並んでおり、東西方向に道路がYの間隔で並んでいると仮定する。いま、あなたは(0, 0)という座標におり、職場は(gX, gY)という位置にある。街にはタクシーが数台あり、(tXs[i], tYs[i])という位置にいる(訳注:配列になっているのは複数台あることを意味する)。職場へは徒歩、あるいは留まっているタクシーへ徒歩で向かい、タクシーで職場へ行くという方法がある。東西方向、あるいは南北方向の隣合う交差点へ向かうのにwalkTime分、タクシーが同様の移動をするのにtaxiTime分かかるとする。このとき、職場へ向かうのに最低限必要となる時間を求めて返すメソッドを作成せよ。

私の解答はこちら。

public class GrabbingTaxi {

 public int minTime(int[] tXs, int[] tYs, int gX, int gY, int walkTime, int taxiTime) {
  // 最初の基準は徒歩のみでかかる移動時間
  int min = (Math.abs(gX) + Math.abs(gY)) * walkTime;
  for( int i=0 ; i<tXs.length ; i++ ){
   // タクシーiを利用した場合について検討する
   // タクシーiでの移動時間
   int taxi_time = (Math.abs(gX - tXs[i]) + Math.abs(gY - tYs[i])) * taxiTime;
   // タクシーiの位置まで徒歩で移動するのにかかる時間
   int walk_time = (Math.abs(tXs[i]) + Math.abs(tYs[i])) * walkTime;
   min = Math.min(min, taxi_time + walk_time); // 最小値を更新したか検討
  }
  return min;
 }

}

得点は239.07/250、1回のsubmitでシステムテストクリア。中央値は約179点。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計