UVA 11988(list, deque)
阿新 • • 發佈:2020-09-15
題目大意
你的鍵盤出現了奇妙的故障,所有鍵都會正常的工作,但是鍵盤上的Home以及End鍵有時候會莫名其妙的自己按下。但是盲打很熟練的你一般習慣關閉顯示器打字,因為這樣很酷。現在你正在打一段文字,假設你已經知道這段文字以及Home和End鍵會什麼時候出現故障自行按下。請你編寫一個程式,求出你最後打出的文字。
解題思路
參考dalao的blog,發現用list模擬真的很方便,比我用deque好寫多了。
list程式碼
int main() { IOS; string s; while(cin >> s) { list<char> l; auto it = l.begin(); for (auto ch : s) { if (ch == '[') it = l.begin(); else if (ch == ']') it = l.end(); else { it = l.insert(it, ch), ++it; } } for (auto ch : l) cout << ch; cout << endl; } return 0; }
附上我醜陋的deque程式碼
int main() { string str; while(cin >> str) { deque<string> dq; string s; int flag = -1, flag2 = 0; for (int i = 0; str[i]; ++i) { if (str[i]=='[') flag = 1; else if (str[i]==']') flag = 0; if (flag!=-1) { if (flag2) dq.push_front(s); else dq.push_back(s); flag2 = flag; flag = -1; s.clear(); } if (str[i]!='['&&str[i]!=']') s += str[i]; } if (!s.empty()) { if (flag2) dq.push_front(s); else dq.push_back(s); s.clear(); } while(!dq.empty()) cout << dq.front(), dq.pop_front(); putchar(endl); str.clear(); } return 0; }