2011年6月7日火曜日

TopCoder SRM184 Div2 250Pts

今回の問題はこちら(要TopCoder登録 & 問題文は英語)。

次に問題を説明する。2回異なる距離を走って得られた距離と時刻の組から、3回目に2回の中間に相当する距離を走った場合に、走りきるのにかかる時刻を予測したい。予測の計算式はすでに与えられているので、フォーマットに従ってかかる時刻を出力せよという問題である。私の解答は以下の通り。

public class RaceApproximator {

 public String timeToBeat(int d1, int t1, int d2, int t2, int raceDistance) {
  int takenSeconds = (int)(t1*Math.exp( Math.log((double)t2/t1)*
                     Math.log((double)d1/raceDistance)/Math.log((double)d1/d2)  ));
  int hours = takenSeconds/3600;
  int minutes = (takenSeconds-hours*3600)/60;
  int seconds = takenSeconds-hours*3600-minutes*60;
  return String.format("%d:%02d:%02d", hours,minutes,seconds);
 }

}

得点は132.63/250。C言語のsprintfに相当するのがString.formatであるということを学んだ。低得点に終わった理由はMath.exp()で囲む範囲を間違えてしまったことで、勿体ないことをした。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計