題目連結:https://zerojudge.tw/ShowProblem?problemid=k733 ```C++= #include <bits/stdc++.h> using namespace std; string s; int rights = 0; // 一次 L 代表一次新的遞迴 // LV 紀錄一次第回中的最左邊;RV 則需要不斷更新 // 需要開 long long,不要忘記 long long int move(int &LV, int &RV, int layers){ RV = -1; LV = -1; long long int ans = 0; while (rights<s.size()){ if (s[rights] == 'T'){ int steps = stoi(s.substr(rights+1,2)); if (RV < 0) LV = steps; else{ ans += abs(steps - RV); } RV = steps; rights += 3; } else if (s[rights] == 'L'){ int loop_times = stoi(s.substr(rights+1,1)); int L ,R; rights+=2; long long int cost = move(L,R, layers+1); if (RV>=0) ans += abs(L-RV); // 這裡的判斷式很重要,因為左側邊界不一定每次都有東西 else LV = L; RV = R; ans += loop_times*cost + abs(L-R)*(loop_times-1); } else if (s[rights] == 'E'){ rights++; return ans; } } return ans; } int main() { cin>>s; int left = 0, right = 0; long long int ans; ans = move(left,right, 0); cout<<ans; return 0; } // T10L2L3T15T22L2T15L5T19T45ET32ET23EET55L2T44T22E ```