2012年12月9日日曜日

TopCoder SRM440 Div2 250Pts

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

あなたは"The Incredible Machine"と呼ばれている古いコンピュータゲームを覚えているかも知れない。これはボールが落下すること、レーザーを打つこと、猫がネズミを追いかけることのような簡単な処理をシミュレーションすることができるゲームであった。さらにこれらの観察をさまざまな重力加速度の値で動作させることができた。重力加速度が未知のシステムを想像しよう。N個のボールがあり、最初にそれぞれは地面からある高さに固定されている。height[]というi番目の要素がi番目のボールの高さを表す整数型の配列が与えられる。時刻0において、最初のボールが放たれて落ち始める。それが地面に到達すると、2番目のボールが放たれる。これを時刻Tに最後のボールが落ちるまで続ける。このシステムの重力加速度を返せ。空気抵抗と他の抵抗する要素は無視せよ。初期速度0で、時間t落ち続けた物体の移動した距離dは、重力加速度をg、抵抗を無しとすれば、d=0.5*g*t^2という式に等しくなる。

私の解答はこちら。

public class IncredibleMachineEasy {

 public double gravitationalAcceleration(int[] height, int T) {
  double t = 0.0;
  for( int i=0 ; i<height.length ; i++ ){
   t += Math.sqrt(2*height[i]);
  }
  return t*t/(T*T);
 }

}

得点は230.45/250。それぞれの物体が地面に落ちるまでの時間はt=sqrt(2d/g)であり、これをそれぞれの要素で計算して、すべて足すとTになる。あとはこれをgについて解けばプログラムで計算すべき式が導出できる。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計