Zerojudge. k733 磁軌移動序列

題解

就是…一直遞迴。建議直接看答案

Python 解答

s = input()

stack = [1] # 存放各層第一個編號,該層總和,最後一個編號
idx = 0 # 當前index

while idx < len(s) :
    if s[idx] == "L" :
        stack.append(int(s[idx+1])) # 紀錄迴圈次數
        idx += 2                   # 更新index
    elif s[idx] == "T" :
        now = int(s[idx+1:idx+3])  # 當前編號
        idx += 3                   # 更新index
        if isinstance(stack[-1],int) : # 第一個數值
            stack.append([now,0,now]) # 新增數值
        else :
            first, sums, end = stack[-1]
            sums += abs(now-end)
            stack[-1] = [first,sums,now] # 計算距離
    else: # elif s[idx] == "E" :
        idx += 1                       # 更新index
        first, sums, end = stack.pop() # 提出數值
        times = stack.pop()            # 提出迴圈次數
        # 計算總和
        sums = sums*times + abs(first-end)*(times-1)
        if isinstance(stack[-1],int) : # 第一個數值
            stack.append([first,sums,end]) # 新增數值
        else :
            # 計算距離
            stack[-1][1] += sums + abs(first-stack[-1][2])
            stack[-1][2] = end 
            
print(stack[-1][1])