2012年5月25日金曜日

TopCoder SRM392 Div2 250Pts

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

2007年の1月にお菓子屋さんが飴を製造した。毎月の最後の日に、お母さんは子供にいくつか飴を食べることを許している。飴の寿命は1/1から飴が食べられるまでの日数である。例えば、1/31に食べられた飴の寿命は31日、12/31に食べられた飴の寿命は365日である(うるう年でないことに注意!)。eatenCandies[]という2007年の各月の最後に食べられた飴の数が与えられたとき(配列の添字0は1月、添字1は2月を表す。以下同様)、飴の平均寿命を計算して返すメソッドを作成せよ。

私の解答はこちら。

public class AverageCandyLifetime {

 public double getAverage(int[] eatenCandies) {
  int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 各月の日数
  int sum = 0;
  int lifetimes = 0;
  int nCandies = 0;
  for( int i=0 ; i<eatenCandies.length ; i++ ){
   lifetimes += days[i];
   nCandies += eatenCandies[i];
   sum += eatenCandies[i] * lifetimes;
  }
  return (double)sum/nCandies;
 }

}

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

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計