日期:2025年3月31日
ZeroJudge 題目連結:h034. 宴會 (Banquet)
解題想法
這題在 Python 可以 itertools.zip_longest 會比較方便。
Python 程式碼
只使用預設工具的寫法,使用時間約為 53 ms,記憶體約為 5.9 MB,通過測試。
import sys
for line in sys.stdin:
n = int(line) # 餐廳總數
food = [input().strip() for _ in range(n)] # 儲存各餐廳的菜單
m = max([len(f) for f in food]) # 最長的菜單數量
for i in range(m): # 處理 m 次
for j in range(n): # 印出各家餐廳的菜名
if i < len(food[j]) and food[j][i].isupper(): # 如果 i 還沒有出界而且 food[j][i] 是大寫字母
print(food[j][i], end="") # 印出這個字母
print() # 全部跑完再換行
Python 中有一個 zip 工具,用來將數個可以迭代的物件綁在一起輸出,但是 zip 會以這些物件中最短的一個作為輸出的上限,其它較長的部分會被捨去。如果要以最長的物件作為輸出的上限,要用 itertools.zip_longest,長度不夠的部分會補 None。使用時間約為 55 ms,記憶體約為 6 MB,通過測試。
import sys
from itertools import zip_longest
for line in sys.stdin:
n = int(line) # 餐廳總數
food = [input().strip() for _ in range(n)] # 儲存各餐廳的菜單
for f in zip_longest(*food): # 先將 food 拆開成多個一維串列,用 zip_longest 綁在一起依序輸出
for c in f: # 依序由 f 讀取各家餐廳的菜名
if c != None and c.isupper(): # 如果 c 不等於 None 而且是大寫字母
print(c, end="") # 印出這個字母
print() # 全部跑完再換行