2012年12月21日金曜日

TopCoder SRM447 Div2 250Pts

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

Facebookでは、異なるタスクが限られた数のコンピュータで同時に実行されなければならない。あなたにはやってくるタスクの集合が与えられる。各コンピュータは最大で1つのタスクを実行することができ、各タスクは1つのコンピュータで完全に実行されなければならない。complexityとcomputersいう整数型の配列が与えられる。complexityの要素iはi番目のタスクの複雑度を表す。computersのi番目の要素はi番目のコンピュータが扱うことができるタスクの複雑度の最大値である。与えられたcomputersで実行できるタスクの最大の数を返せ。

私の解答はこちら。

import java.util.Arrays;

public class ImportantTasks {

 public int maximalCost(int[] complexity, int[] computers) {
  Arrays.sort(complexity);
  Arrays.sort(computers);
  int idxCompl = complexity.length - 1;
  int idxCompu = computers.length - 1;
  int nExecutable = 0;
  while( idxCompl >=0 && idxCompu >= 0 ){
   if( computers[idxCompu] >= complexity[idxCompl] ){
    nExecutable++;
    idxCompu--;
   }
   idxCompl--;
  }
  return nExecutable;
 }

}

二つの配列をソートして、複雑度とコンピュータの処理能力を比較することを繰り返せばOK。大きい方から探すのが簡単と思います。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計