🌟
競技プログラミングの鉄則 アルゴリズムと思考力を高める77の技術をpythonで解いていく 第2章
A06 - How Many Guests?
import itertools
N, Q = map(int, input().split())
A = list(map(int, input().split()))
L = []
R = []
for i in range(Q):
x, y = map(int, input().split())
L.append(x)
R.append(y)
# 累積和を求めるitertoolライブラリのaccumulate関数
accumulation = list(itertools.accumulate(A))
for i in range(Q):
# Lが1日目以外の場合は、R日目までの累積和からL-1日目までの累積和を引く
if (L[i]) != 1:
answer = accumulation[R[i]-1] - accumulation[L[i]-2]
print(answer) #累積和を求めるitertoolライブラリのaccumulate関数
# Lが1日目の場合は、R日目までの累積和が答えになる
else:
answer = accumulation[R[i]-1]
print(answer)
itertoolライブラリで累積和を求めればあとはそこまで難しくない。
B07 - Convenience Store 2
T = int(input())
N = int(input())
L = []
R = []
for i in range(N):
x, y = map(int, input().split())
L.append(x)
R.append(y)
# t-0.5とt+0.5にコンビニにいる従業員数の差分を格納する配列
difference = [0] * (T+1)
for i in range(N):
difference[L[i]] += 1
difference[R[i]] -= 1
# 累積和を数列に格納する(最初の要素は格納しておく)
accumulation = [0] * (T+1)
accumulation[0] = difference[0]
for i in range(1, T+1):
accumulation[i] = accumulation[i-1] + difference[i]
for i in range(T):
print(accumulation[i])
負の数が要素に含まれているとitertoolライブラリaccumulate関数は使えないっぽい?
Discussion