# 計算一個序列中出現最多次的元素數量
def cv(rs):
d = [rs.count(i) for i in rs] # 對每個字元計算出現次數
return max(d) # 傳回最大次數
# 讀取輸入:m 行、每行 n 個字元,共要做 k 次操作
m, n, k = map(int, input().split())
ss = [] # 存放每一行的字串
for i in range(m):
ss.append(input()) # 讀入 m 行字串
ts = [] # 存放每次的旋轉操作(每次是 m 個整數)
for i in range(k):
ts.append([int(i) for i in input().split()])
acsumcv = 0 # 總共的最大重複次數累加
# 逐次執行 k 次旋轉操作
for t in ts:
rs = [] # 儲存這一次旋轉後的新字串們
for j in range(m):
n = t[j] # 第 j 行旋轉的次數
s = ss[j] # 第 j 行的原始字串
if n > 0:
# 右旋轉 n 次:每次將最後一個字元移到最前面
for i in range(n):
s = s[-1] + s[:-1]
else:
# 左旋轉 -n 次:每次將第一個字元移到最後面
n = -n
for i in range(n):
s = s[1:] + s[0]
rs.append(s) # 把旋轉後的新字串加進 rs
# 將多行字串轉置(轉為欄位為主)
cs = [i for i in zip(*rs)] # 每一欄是所有字串中同一位置的字母
# 對每一欄計算最多出現幾次的字母數量
csv = [cv(i) for i in cs]
# 將這次操作的總得分加總
acsumcv += sum(csv)
# 更新 ss 為這次操作後的結果,供下次旋轉使用
ss = rs
# 印出所有操作完成後的總得分
print(acsumcv)
沒有留言:
張貼留言