AtCoder ABC 130 B – Bounding Python解説

スポンサーリンク

Bounding

数直線上を N + 1 回跳ねるボールがあり、1 回目は 座標 D1​=0i 回目は 座標 Di​=Di−1​+Li−1​(2≤iN+1) で跳ねます。
数直線の座標が X 以下の領域でボールが跳ねる回数は何回でしょうか。

AtCoder Beginner Contest 「Bounding」

1回目は座標0で跳ね、2回目以降は Li が加算されていきます。先にボールが跳ねる座標をすべて計算して、そのあとXの領域内で跳ねた回数を求めます。

n, x = map(int, input().split())
l = list(map(int, input().split()))

dp = [0] * (n + 1)
dp[0] = 0

cnt = 0

for i in range(1, n + 1):
    dp[i] = dp[i - 1] + l[i - 1]
    
for i in dp:
    if i <= x:
        cnt += 1
        
print(cnt)

ボールが跳ねる回数はN+1と決まっているため、あらかじめ配列dpを用意し、for文を使ってボールが跳ねる座標を獲得しています。

n, x = map(int, input().split())
l = list(map(int, input().split()))

cnt = 1
d = 0

for i in l:
    d += i
    if d <= x:
        cnt += 1
        
print(cnt)
    

上記のコードでも解けます。最初にcnt=1にしているのは座標0で跳ねる分をカウントしているからです。

AtCoderB問題

Posted by cheese