2012年1月4日水曜日

TopCoder SRM299 Div2 250Pts

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

歴史的な経緯から、人々は華氏と摂氏のように異なったスケールで温度を測っている。あなたへの課題は、あるスケールで計測された温度を別のスケールの温度に変換することである。どちらのスケールも互いに線形な関係であることが知られている。つまりある温度tに対し、a*t+bで別のスケールに変換できるということである。問題文では5つの整数値が与えられる。f1、b1というあるスケールで水が凍る温度と沸騰する温度、f2、b2という別スケールで水が凍る温度と沸騰する温度、tというf1、b1のスケールにおけるある温度である。返す値はtを2番目のスケールに変換したときの温度である。

私の解答はこちら。

public class TemperatureScales {

 public double convert(int f1, int b1, int f2, int b2, int t) {
  return 1.0*(b2-f2)/(b1-f1)*(t-f1)+f2;
 }

}

得点は246.26/250、中央値は約213点。撃墜1つで+50点。関係は直線で説明できるので、直線の傾きと通る1点が分かればOK。上のコードでは、(f1,f2)という点を通るということを利用しています。実数に変換するところでミスしないように気を付けるだけですね。コーディングより問題文を読むほうがずっと時間がかかってしまうような問題でした。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計