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;  
}
上一篇:[UVA]10830 A New Function


下一篇:UVA 156 Ananagrams STL应用