この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 件のコメント:
コメントを投稿