2025年6月16日 星期一

轉盤得分

 # 計算一個序列中出現最多次的元素數量

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)


data:
3 6 2
apcsie
taiwan
icpeda
1 0 -4
7 -3 2

Output:

17

沒有留言:

張貼留言