2011年5月1日日曜日

TopCoder SRM180 Div2 250Pts

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

問題のおおまかに説明する。問題文に登場するDinkyFishというのは小魚という意味である。

小魚を水槽で飼う。オスとメスを水槽に入れておくと必ずつがいができ、毎月カップルにはオスとメスが1匹ずつ生まれる。ただし、水槽で飼うに当たり1匹あたり少なくとも0.5リットルの水が必要である。小魚は混んだ場所では生活できないのである。水槽の容量tankVolume(単位:リットル)、初期のオス、メスの投入量maleNum、femaleNumが与えられたときに混んだ状態になる直前になるまで何か月かかるかを計算して返すメソッドmonthsUntilCrowdedを作成せよ。

気を付ける点としては、0ヶ月目から飼える数の上限を超えてないかという判定を行うこと、1匹につき0.5リットルの水なので、2*tankVolumeが飼える小魚の数の上限を表すということぐらい。易問。

public class DinkyFish {
 public int monthsUntilCrowded(int tankVolume, int maleNum, int femaleNum) {
  int maxNum = 2*tankVolume;
  int minNum = 0;
  int i;
  for( i=0 ; (maleNum+femaleNum)<=maxNum ; i++){
   minNum = Math.min(maleNum, femaleNum);
   maleNum += minNum;
   femaleNum += minNum;
  }
  return i;
 }
}

得点は232.62/250と比較的高速。単純なので特にコメントはない。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計