Zerojudge. i400 字串解碼

題解

若要把題目的加密規則反過來解密的話

  1. 要從數個加密的最後一個開始解密
  2. 把e由後往前遍歷(因為每次加密都是把S的字元接到T的最後面)
  3. e[i]=0就把T的最後一個字元接到S的開頭,否則尾巴
  4. 要切割調換前後最後再調換

Python 解答

from collections import deque

def trans(s, e):
    ecount = 0
    dq = deque()
    
    for i in range(len(e)-1, -1, -1):
        if e[i] == '1':
            ecount += 1
            dq.append(s[i])
        else:
            dq.appendleft(s[i])
    
    #跳過前後交換
    if ecount%2 == 0:
        return ''.join(dq)
    else:
        lst = list(dq) #list才可以slice
        if n%2==0:
            return ''.join(lst[n//2:]) + ''.join(lst[:n//2])
        else:
            return ''.join(lst[n//2+1:]) + lst[n//2] + ''.join(lst[:n//2])

m, n = map(int, input().split())

e = [input() for _ in range(m)][::-1]
s = input()

for i in e:
    s = trans(s, i)
    
print(s)