2011年4月12日火曜日

TopCoder SRM169 Div2 250Pts

昨日に引き続いてJavaと英語の練習。今日の問題設定はこんな感じ。

ある人iがspeed[i]の速さで泳ぐ。distances[i]は泳ぐ距離を表し、currentは川の流れの速さを表す。このとき、泳ぐ人はdistances[i]の距離だけ川を上下する。このとき、ある人iは泳ぎきるのにどれほど時間がかかるか整数値(切り捨て)で求めよ。ただし、川の流れの方がある人iの泳ぐ速さ以上に速い場合は川を上れないので、かかる時間は-1とする。また、泳ぐ距離が0の場合は泳ぐのにかかる時間は0になる。上下の折り返しに時間はかからないものとする。

私が作成した回答は以下の通り。

public class Swimmers{
 public static int[] getSwimTimes(int[] distances,int[] speeds, int current){
  int i;
  int[] result = new int[distances.length];
  for( i=0 ; i<distances.length ; i++ ){
   if( distances[i] == 0 ){
    result[i] = 0;
   }else if( speeds[i]<=current ){
    result[i] = -1;
   }else{
    result[i] = (int)((double)distances[i]/(current+speeds[i]) + (double)distances[i]/(speeds[i]-current));
   }
  }
  return result;
 }
}

結果は226.14/250。キャストと、ifとif elseの内容を逆に書いていたことでコンパイルエラーが発生したが、そのほか特に問題なく実装を行うことができた。Eclipseのプラグイン入れて練習した方がスピードが上がるのかちょっと検討中。デフォルトの環境ではちょっと厳しいかもしれない。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計