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