2012年3月27日火曜日

TopCoder SRM146 Div2 500Pts

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

高さheight、幅widthの格子の中に、長方形(正方形は含まない)がいくつあるかを数えて返すメソッドを作成せよというのが問題である。例えば下図のような2*2の格子であれば、1*2の長方形が2つ、2*1の長方形が二つなので、4を返すことになる。1*1や2*2の長方形は数えないことに注意。
__ __
|__|__|
|__|__|

私の解答はこちら。

public class RectangularGrid {

 public long countRectangles(int width, int height) {
  long nRec = 0;
  for( int i=1 ; i<=width ; i++ ){
   for( int j=1 ; j<=height ; j++ ){
    if( i==j ) continue; // 正方形は考慮しない
    nRec += (width+1-i)*(height+1-j); // 幅i、高さjの長方形の数をnRecに加えている
   }
  }
  return nRec;
 }

}

得点は481.20/500、1回のsubmitでシステムテストクリア。方針は2通りで、全部数えて正方形を取り除く方法、正方形以外を逐次カウントする方法があるはず(上の回答は後者)。他のコードを読んでみると、変数名が違う程度で、ほぼ同じ回答もあった。アイディアが問題であるが、500点問題にしては容易であった。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計