1. 程式人生 > 實用技巧 >UVA 11988(list, deque)

UVA 11988(list, deque)

題目連結

題目大意

  你的鍵盤出現了奇妙的故障,所有鍵都會正常的工作,但是鍵盤上的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;  
}