2011年9月15日木曜日

TopCoder SRM245 Div2 250Pts

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

ストレートの数に関するトランプゲームで遊んでいる。値が連続したカードの集合が手の強さを決める。hand[]という整数型配列のi番目の値が手の中のiという値の数を表している。長さkのストレートの数を返せ。

例えば、hand[] = { 0, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }という手が与えられると、k=2のストレートの数(強さ)は5になる。これは2のカードと3のカードの組が3通り、3のカードと4のカードの組が2通りあるので、長さ2のストレートの数は3+2=5になるわけである。

私の解答はこちら。

public class Straights {
 public int howMany(int[] hand, int k) {
  int cnt = 0;
  for( int i=0 ; i<hand.length-k+1 ; i++ ){
   int perm = hand[i];
   for( int j=1 ; j<k ; j++ ){
    perm *= hand[i+j];
   }
   cnt += perm;
  }
  return cnt;
 }
}

得点は229.00/250、中央値は約190点。英語の読解と実装に同じぐらいの時間かかったかな?IndexOutOfBoundsExceptionにだけ注意しましょう(コンパイル後のテストでhand[i+j]で何度か例外を投げられてしまった)。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計