2011年6月22日水曜日

TopCoder SRM191 Div2 250Pts

今日の問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。

問題について軽く説明する。賭け事について考える。

ある賭け事で、賭ける側は予測される結果「0からamounts.length-1までの整数」に対し、それぞれamounts[]ドルを賭ける。最終的な当たりがfinalResultになったとすると、finalResult以外に賭けたお金は運営者の収益になる。一方、当たりに対しては、運営者が1ドルにつきcentePerDollar[]セント払うように設定してある。この賭けが終わった後に、運営者が儲けるのは何セントになるか求めるメソッドを作成せよ。

この問題を読んだときに、トトが真っ先に思い浮かんだ、私の最初の解答はこちら。

public class BettingMoney {
 public int moneyMade(int[] amounts, int[] centsPerDollar, int finalResult) {
  int comp = 0; // 運営の収益
  int people = 0; // 賭けた人が当たりにした額
  for( int i=0 ; i<amounts.length ; i++ ){
   if( i != finalResult ){
    comp += amounts[i];
   }else{
    people += amounts[i];
   }
  }
  return comp*100-people*centsPerDollar[finalResult];
 }
}

得点は226.20/250。正解率は約97%!変数名を運営会社と賭ける人々という意味にしたけど、あまり良い変数名ではないですね。また、peopleは次のように変形すれば不要ということに気付きました。

public class BettingMoney {
 public int moneyMade(int[] amounts, int[] centsPerDollar, int finalResult) {
  int comp = 0;
  for( int i=0 ; i<amounts.length ; i++ ){
   if( i != finalResult ){
    comp += amounts[i];
   }
  return comp*100-amounts[finalResult]*centsPerDollar[finalResult];
 }
}

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計