クルトンのプログラミング教室

Pythonの使い方やPythonを使った競技プログラミングの解法などを解説しています。

Pythonで理解する蟻本「3-2 Physics Experiment(POJ No.3684)」(p.145)

この記事は「プログラミングコンテストチャレンジブック第2版」(蟻本)の
「3-2 Physics Experiment(POJ No.3684)」(p.145)
のコードをPythonで書き直したものとなっています。

入力

N\,H\,R\,T

入力例1



1 10 10 100

入力例2



2 10 10 100


解答

g = 10.0    # 重力加速度

# 入力
N, H, R, T = map(int,input().split())

y = [0] * N    # 最終的なボールの位置

# 時刻Tでのボールの位置を求める
def calc(T):
    if T < 0:
        return H
    t = (2 * H / g) ** 0.5
    k = T // t
    if k % 2 == 0:
        d = T - k * t
        return H - g * d * d / 2
    else:
        d = k * t + t - T
        return H - g * d * d / 2

for i in range(N):
    y[i] = calc(T - i)
y.sort()
print(*['{:.2f}'.format(y[i] + 2 * R * i / 100) for i in range(N)])