2012年5月16日水曜日

TopCoder SRM387 Div2 250Pts

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

A[]という整数型の配列が与えられる。Aは等差数列か等比数列のどちらかである。Aがどちらであるかを判定し、Aの最後の要素に続く要素を返すメソッドを作成せよ。なお、Aはどちらかであるか判別可能であり、解答は32bit型の符号付き整数の範囲に収まることが保証されている。

私の解答はこちら。

public class GuessingNextElement {

 public int guess(int[] A) {
  if( A[1] - A[0] == A[2] - A[1] ){ // 問題文ではAが3つ以上の要素を持つことを保証している
   return A[A.length-1] + (A[1] - A[0]); // Aが等差数列である場合
  }else{
   int ratio = A[1] / A[0]; // Aが等比数列である場合
   return A[A.length-1] * ratio;
  }
 }

}

得点は207.77/250、2回目のsubmitでシステムテストクリア。if文の中身を割り算でやると割り切れないケースで失敗するので、等差数列かそうでないかで判定する方が間違いが出にくいですね。1回目の提出はシステムテストで見事に弾かれました。中央値は約230点。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計