日期:2026年3月1日
ZeroJudge 題目連結:c094. 00661 - Blowing Fuses
解題想法
用陣列記錄每個電器是否開啟,依序讀取操作的電器編號,更新電器使用狀態及總電流。用一個布林值記錄是否已經燒掉,如果總電流過大標記為 True。
Python 程式碼
使用時間約為 7 ms,記憶體約為 2.9 MB,通過測試。
import sys
ca = 0 # 第幾次測試
for line in sys.stdin:
n, m, c = map(int, line.split()) # n 個電器,m 次操作,最大電流 c
if n == 0 and m == 0 and c == 0: break # 中止迴圈的條件
ca += 1 # ca 加 1
if ca > 1: print() # 如果不是第 1 次測試,先印出空白列
current = [0] + [int(sys.stdin.readline()) for _ in range(n)] # 讀取 n 個電器的電流,開頭加 0
blown = False # 是否已燒掉
curr, imax = 0, 0 # 目前的電流,電流最大值
turn_on = [False]*(n+1) # 電器狀態,預設為關閉
for _ in range(m): # 讀取 m 次操作
idx = int(sys.stdin.readline()) # 電器編號
if blown: continue # 如果已燒掉,繼續讀完剩下的操作
turn_on[idx] = not turn_on[idx] # 更新電器的狀態
if turn_on[idx]: curr += current[idx] # 如果開啟,加上這個電器的電流
else: curr -= current[idx] # 如果關閉,減去這個電器的電流
if curr > c: blown = True # 如果 curr 大於 c,已燒掉
else: imax = max(imax, curr) # 反之,更新最大電流
print(f"Sequence {ca:d}") # 印出答案
if blown:
print("Fuse was blown.")
else:
print("Fuse was not blown.")
print(f"Maximal power consumption was {imax:d} amperes.")