2012年4月21日土曜日

TopCoder SRM379 Div2 250Pts

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

複数のファイルをインターネットからダウンロードしようとしている。各ファイルのダウンロード状況について、"ダウンロード中の速度 ダウンロードにかかる時間"という形式で文字列型配列が与えられる。あるファイルのダウンロードが終わると、利用していた帯域は残りのファイルをダウンロードに割り当てられることができる。そのため、途中でダウンロード中の速度は上がり、ダウンロードにかかる時間は短くなる。さて、ある時点におけるダウンロード状況が与えられたとき、実際にかかる時間を計算して返すメソッドを作成せよ。

私の解答はこちら。

public class DownloadingFiles {

 public double actualTime(String[] tasks) {
  int speed = 0;
  int time = 0;
  int fileSize = 0;
  for( int i=0 ; i<tasks.length ; i++ ){
   String[] tmp = tasks[i].split(" ");
   speed += Integer.parseInt(tmp[0]);
   time += Integer.parseInt(tmp[1]);
   fileSize += Integer.parseInt(tmp[0]) * Integer.parseInt(tmp[1]);
  }
  return (double)fileSize/speed;
 }

}

得点は234.20/250、1回のsubmitでシステムテストクリア。初見で帯域をどうやって割り振っていいか理解できず、ぎょっとしたものの、そのようなことを考える必要はなく、ファイルサイズの合計/バンド幅(というか速度の合計)で求まるというオチ。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計