題解
若要把題目的加密規則反過來解密的話
- 要從數個加密的最後一個開始解密
- 把e由後往前遍歷(因為每次加密都是把S的字元接到T的最後面)
- e[i]=0就把T的最後一個字元接到S的開頭,否則尾巴
- 要切割調換前後最後再調換
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)