2013年4月28日 星期日

10071 - Back to High School Physics


A particle has initial velocity and constant acceleration. If its velocity after certain time is v then what will its displacement be in twice of that time?

Input
The input will contain two integers in each line. Each line makes one set of input. These two integers denote the value of v (-100 <= v <= 100) and t(0<=t<= 200) ( t means at the time the particle gains that velocity) 

Output
For each line of input print a single integer in one line denoting the displacement in double of that time.

Sample Input
0 0
5 12

Sample Output
0
120


出處: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1012


這題是個物理題(話說我高中時候物理超級爛,但是竟然還記得一點點力學的公式XD,若推導有不對還請多多指教)。首先題目會告訴你在某個時間點(t)下的速度(v),要你算出兩倍的時間(2 * t)的位移是多少。
要算出位移,需要套用到以下公式:

x是位移, v0是初速, t是時間, a是加速度
x = v0 * t + (1 / 2) * a * t ^ 2

現在我們將題目要的結果v和2 * t(因為要2倍時間)帶到公式裡並且算出位移x,則:

x = v0 * (2 * t) + (1 / 2) * a * (2 * t) ^ 2

整理一下

x = 2 * v0 * t + (1 / 2) * a * 4 * t ^ 2

我們需要加速度a,所以用以下公式算出a:

v = v0 + a * t

a = (v - v0) / t

將a代回我們的位移公式:

x = 2 * v0 * t + (1 / 2) * ((v - v0) / t) * 4 * t ^ 2

最後可以把此算式整理成以下算式:

x = 2 * v * t

這就是神奇的最終公式啦~所以只要把所有的input代這個公式就可以求解嚕。

以下是c++程式碼:

#include <iostream>
using namespace std;

int main() {
    int v, t;

    while (cin >> v >> t)
        cout << 2 * v * t << endl;

    return 0;
}

沒有留言:

張貼留言