2013年2月27日水曜日

TopCoder SRM464 Div2 250Pts

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

numRedの赤い箱、numBlueの青い箱、numRedの赤い球、numBlueの青い球を使うゲームをしている。各ボールを箱に入れる。各箱は以下のようにして点数がつけられる。

  • 箱が赤で赤い球を含んでいればonlyRed点得る。
  • 箱が青で青い球を含んでいればonlyBlue点得る。
  • それ以外はbothColors点得る。

合計点はすべての箱の点数の合計である。可能性がある得られる点数の最大値を返せ。

私の解答はこちら。

public class ColorfulBoxesAndBalls {

 public int getMaximum(int numRed, int numBlue, int onlyRed, int onlyBlue, int bothColors) {
  int same = numRed * onlyRed + numBlue * onlyBlue;
  int diff;
  if( numRed < numBlue ){
   diff = bothColors * numRed + bothColors * numRed + onlyBlue * (numBlue - numRed);
  }else{
   diff = bothColors * numBlue + bothColors * numBlue + onlyRed * (numRed - numBlue);
  }
  return Math.max(same, diff);
 }

}

得点は232.88/250、1回のsubmitでシステムテストクリア。可能性があるのは箱と球の色がすべての箱で完全一致した場合と、できるだけ箱と球の色が一致しないようにした場合の2種類のみなので、それらについてのみ点数を検討すればOK。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計