日期:2026年5月5日
ZeroJudge 題目連結:a271. 彩色蘿蔔
解題想法
首先要排除特例,也就是進食資料是空行的狀況,直接輸出原體重就好。接下來依序讀取每天的進食資料,要先結算中毒造成的效果,由於題目有說毒素會累積,假設目前累積的毒素為 $p$,則每天會使體重減少 $n \times p$,再檢查此時體重 $m$ 是否已經歸零,如果歸零則印出 bye~Rabbit 並中止迴圈。接下來結算進食的效果,依照蘿蔔的種類更新體重,如果吃到黃、黑蘿蔔會減少體重,要再檢查體重 $m$ 是否已經歸零,如果歸零則印出 bye~Rabbit 並中止迴圈。更新完每天的體重之後,如果 $m$ 還沒有歸零,則印出 $m$。
Python 程式碼
使用時間約為 1.8 s,記憶體約為 8.4 MB,通過測試。
T = int(input())
for _ in range(T):
# 前 4 項為紅、白、黃、黑蘿蔔對應的體重變化
# n 為中毒狀態每天減少的體重,m 為體重初始值
x, y, z, w, n, m = map(int, input().split())
line = input() # 每天吃的蘿蔔
if not line: # 特例,沒有吃蘿蔔,直接輸出原體重
print(f"{m:d}g")
continue
p = 0 # 累積的毒素
for v in map(int, line.split()): # 每天吃的蘿蔔種類
# 要先結算中毒造成的效果
if p > 0:
m -= n*p
if m <= 0:
print("bye~Rabbit")
break
# 再結算進食的效果
if v == 0: # 沒吃
pass
elif v == 1: # 紅色
m += x
elif v == 2: # 白色
m += y
elif v == 3: # 黃色
m -= z
if m <= 0:
print("bye~Rabbit")
break
elif v == 4: # 黑色
m -= w
p += 1 # 毒素加 1
if m <= 0:
print("bye~Rabbit")
break
# 如果 m 沒有歸零,輸出 m 的值
if m > 0:
print(f"{m:d}g")