2011年6月1日水曜日

TopCoder SRM182 Div2 300Pts

今日もJavaと英語の練習。300点問題ということもあり、いつもの250点問題より難しめかと身構えてみる。

本日の問題はこちら(要TopCoder登録 & 問題文は英語)。

問題を大まかに説明する。
国際バカロレア資格で高校生は卒業時の試験で、1-7の7段階に成績で分けられる。ただ分けられた試験の結果を大学入学の決定には利用できない。そこで先生は試験の結果を予測するということが要求される。学生の将来がかかっているので、学校は精度の評価に非常に興味を持っている。問題としては、getSummaryというメソッドを持つIBEvaluatorを作成する。予測結果predictedGrades[]と実際の結果actualGrades[]があり、各インデックスが一人に対する値を表している。2つの配列が与えられたとき、メソッドは7つの要素を持つ配列を返す。内容は、0-6の誤差が何%現れたかというパーセンテージが入ったものである。返す配列の型は整数値で、パーセンテージの値は小数点以下を切り捨てたものとする。したがって、返す配列のインデックス0の値の中身は予測と実際の値が一致した割合を示している。インデックス1は、予測と実際の誤差の絶対値が1であることを示している。

import java.math.*;

public class IBEvaluator {

 public int[] getSummary(int[] predictedGrades, int[] actualGrades) {
  int array[] = new int[7];
  for( int i=0 ; i<predictedGrades.length ; i++ ){
   int diff = Math.abs(predictedGrades[i]-actualGrades[i]);
   array[diff]++;
  }
  double percentEachPerson = 100.0/predictedGrades.length;
  for( int i=0 ; i<7 ; i++ ){
   array[i] = (int)(array[i]*percentEachPerson);
  }
  return array;
 }

}

点数は264.09/300、結局思ったよりもずっと簡単で、拍子抜け。スピードとしては2部リーグのほぼ中程度。ポカしてなければもっと速く実装できたが、勿体ない。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計