2011年8月8日月曜日

TopCoder SRM211 Div2 300Pts

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

マウスをクリックしたときの、マウスの行方向と列方向の座標値が配列になって与えられる。mouseRows[]とmouseCols[]が座標の配列で、i番目の要素がi番目のクリックに対応しているものとする。何番目のクリックがSaveという画像の中にあったかを示す整数型の配列を返すメソッドを作成せよ。なお、画像の座標は行方向は20以上39以下、列方向は50以上99以下になっている。

私の解答は以下の通り。

public class grafixClick {
 public int[] checkSaveButton(int[] mouseRows, int[] mouseCols) {
  int[] inButton = new int[mouseRows.length];
  int nIn = 0;
  for( int i=0 ; i<mouseRows.length ; i++ ){
   inButton[i] = -1;
   if( mouseRows[i] >= 20 && mouseRows[i] <=39 && 
       mouseCols[i] >= 50 && mouseCols[i] <= 99 ){
    inButton[i] = i;
    nIn++;
   }
  }
  int[] ret = new int[nIn];
  int idx = 0;
  for( int i=0 ; i<inButton.length ; i++ ){
   if( inButton[i] >= 0 ){
    ret[idx] = inButton[i];
    idx++;
   }
  }
  return ret;
 }
}

得点は254.91/300、中央値は約265点、正解率は93.85%。配列のみを用いて解いているが、リストを利用してaddで条件にあてはまるインデックスの集合を求めて、それを配列に入れなおして配列を返すという手法もあるようだ。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計