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
微信扫码关注
抖音扫码关注