2011年12月29日木曜日

TopCoder SRM296 Div2 250Pts

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

N1={1,2,...,1000}という配列が与えられる。ここから2の倍数番目に現れるものを取り除いた{1,3,5,...,999}をN2とする。さらにN2から3の倍数番目に現れる要素を取り除いた{1,3,7,9,13,...}をN3とする。このような操作を繰り返すとN10というものが生成できるが、このN10のn番目の要素の値を返せ。なお、N10の要素数は101になる。

私の解答はこちら。

import java.util.TreeSet;

public class EratosthenSieve2 {

 public int nthElement(int n) {
  TreeSet<Integer> work = new TreeSet();
  Integer[] res = null;
  for( int i=1 ; i<=1000; i++ ){
   work.add(i);
  }
  for( int i=2 ; i<=10 ; i++ ){
   res = (Integer[])work.toArray(new Integer[0]);
   work.removeAll(work);
   for( int j=0 ; j<res.length ; j++ ){
    if( (j+1)%i != 0 ) work.add(res[j]);
   }
  }
  res = (Integer[])work.toArray(new Integer[0]);
  return res[n-1];
 }

}

得点は128.10/250、中央値は約163点。return直前のresへの代入が抜けていて嵌ること約10分...

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計