日期: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.")
C++ 程式碼
使用時間約為 0 ms,記憶體約為 44 kB,通過測試。
#include <cstdio>
int main() {
int ca = 0, n, m, c; // 第幾次測試,n 個電器,m 次操作,最大電流 c
while(scanf("%d %d %d", &n, &m, &c) != EOF) {
if (n == 0 && m == 0 && c == 0) break; // 中止迴圈的條件
ca++; // ca 加 1
if (ca > 1) puts(""); // 如果不是第 1 次測試,先印出空白列
int current[n+1] = {0}; // 讀取 n 個電器的電流,開頭加 0
for(int i=1; i<=n; i++) scanf("%d", ¤t[i]);
bool blown = false, turn_on[n+1] = {false}; // 是否已燒掉,電器狀態
int curr = 0, imax = 0; // 目前的電流,電流最大值
for(int i=0; i<m; i++) { // 讀取 m 次操作
int idx; scanf("%d", &idx); // 電器編號
if (blown) continue; // 如果已燒掉,繼續讀完剩下的操作
turn_on[idx] = !turn_on[idx]; // 更新電器的狀態
if (turn_on[idx]) curr += current[idx]; // 如果開啟,加上這個電器的電流
else curr -= current[idx]; // 如果關閉,減去這個電器的電流
if (curr > c) blown = true; // 如果 curr 大於 c,已燒掉
else if (curr > imax) imax = curr; // 反之,更新最大電流
}
printf("Sequence %d\n", ca); // 印出答案
if (blown) {
puts("Fuse was blown.");
} else {
puts("Fuse was not blown.");
printf("Maximal power consumption was %d amperes.\n", imax);
}
}
return 0;
}
沒有留言:
張貼留言