a693: 吞食天地
這篇教學會示範 ZeroJudge 基礎題庫「a693: 吞食天地」的解題過程。
題目需求
題目會先提供一串數字,代表一連串食物的飽足感,接著會提供 a 和 b 兩個數字,透過程式計算「第 a 個 ~ 第 b 個」食物加起來的飽足感總和。
題目連結:a693: 吞食天地
解答
為了避免超時 ( TLE ),可以採用下列兩個做法:
- 將「計算總和」放在擷取範圍的迴圈之外,就不需要每次執行迴圈時都計算一次總和
- 透過 Python 的標準函式庫「高效迭代器 itertools」計算總和。
計算出總和後,如果要計算 ab 範圍內的數值,只需要用 0b 的總和,減去 0~a-1 的總和,就可以得到最後的結果
參考:accumulate、for 迴圈
from itertools import accumulate # 載入 itertools 的 accumulate
while True:
try:
n, m = map(int, input().split())
food = [int(i) for i in input().split()] # 將輸入的一連串數字轉成串列
food_sum = [0] + list(accumulate(food)) # 計算總和變成新串列
for i in range(m):
a, b = map(int, input().split()) # 取出前後範圍
print(food_sum[b] - food_sum[a-1]) # 用 0~b 的總和,減去 0~a-1 的總和
except:
break
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~