UVa 10387
題目
http://domen111.github.io/UVa-Easy-Viewer/?10387
有一張長寬分別為 $a, b$ 的桌子,在他的正中央有一顆球,這顆球會以某個速度 $v$ ,以角度 $A$ 在桌子碰撞,分別在桌子的直向與橫向處撞擊 $m, n$ 次後回到初始位置
求這顆球的初速 $v$ 以及初始角度 $A$
並且假定球再碰撞過程中並無能量損耗,一切都是完美狀況
想法
可以先畫一張圖看看,會發現到球在碰撞的過程當中與橫向之間的角度,也就是初始角度 $A$ 都不會改變
並且由於無論如何球都必須要回到原點,每次碰撞過後為了回到原點,必須移動朝向方向(橫向或直向)移動一個長或寬的距離
所以我們可以透過 $a \times m$ 和 $b \times n$ 求到球在桌面上的橫向與直向的移動總距離
透過畢氏定理可以求得球的移動距離,再除以時間就會是速度
$$v = \frac{\sqrt{(am)^2+(bn)^2}}{s}
$$
角度的部分可以透過 $atan$ 求得
由於 C++ 經過 $atan$ 求到的是弧度,而題目要的是角度,所以要再另外計算一個弧度是多少角度 $angle=asin(1.0)/90$
$$A = \frac{atan(\frac{bn}{am})}{asin(1.0)/90}
$$
Code
1 |
|
時間複雜度分析
每次輸入的計算時間可估為 $O(1)$