2012年5月31日木曜日

TopCoder SRM393 Div2 250Pts

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

道を安全なものにするために、ある地域の政府は時間によって複数の速度制限を設けることにした。混雑時には危険な事故を避けるため、速度制限は厳しいものになる。あなたは、ある単位距離だけ運転する必要があり、どの程度の時間がかかるか知りたいと思っている。問題では、速度制限を意味するspeedLimit[]という整数型の配列が与えられる。(0を基準とした添え字で)要素iの内容はある時刻iからi+1の単位時間における速度制限である。speedLimit[]は1日の速度制限の様子を表しており、このパターンは繰り返されることになる(1日経過して速度制限の内容は配列の先頭に戻る)。あなたは時刻0から運転を開始するものとし、運転中は速度制限の上限で常に運転を行うものとする。journeyLengthという距離だけ走った時の、運転の平均速度を返すメソッドを作成せよ。

私の解答はこちら。

public class VariableSpeedLimit {

 public double journeyTime(int journeyLength, int[] speedLimit) {
  int idx = 0; // 走っている時点での速度制限配列の添字管理
  double time = 0.0; // 走行時間
  int patternLength = speedLimit.length;
  int totalRun = 0;
  while( true ){
   if( totalRun + speedLimit[idx] < journeyLength ){ // 次の単位時間も継続して走る場合
    totalRun += speedLimit[idx];
    time += 1.0;
   }else{ // 次の単位時間中に走り終える場合
    time += (journeyLength - totalRun)*1.0 / speedLimit[idx];
    break;
   }
   idx = (idx + 1) % patternLength; / 速度制限の上限値を変更する
  }
  return time;
 }

}

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

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計