Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 模拟

题目链接:

http://codeforces.com/contest/670/problem/E

题解:

用STL的list和stack模拟的,没想到跑的还挺快。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<list>
#include<stack>
using namespace std;

const int maxn = 500000 + 10;
const int INF = 2e9;
typedef __int64 LL;

int n, m, pos;
char str[maxn];
list<char> ml;
stack<char> ms;

void init() {
    ml.clear();
}

int main() {
    while (scanf("%d%d%d", &n, &m, &pos) == 3 && n) {
        pos--;
        init();
        scanf("%s", str);
        for (int i = 0; i < n; i++) {
            ml.push_back(str[i]);
        }
        scanf("%s", str);
        list<char>::iterator it = ml.begin();
        while (pos--) ++it;
        for (int i = 0; i < m; i++) {
            if (str[i] == 'L') it--;
            else if (str[i] == 'R') it++;
            else {
                ms.push(*it);
                list<char>::iterator p = it;
                if (*p == '(') {
                    while (!ms.empty()) {
                        ++p;
                        if (ms.top() == '('&& *p == ')') ms.pop();
                        else ms.push(*p);
                    }
                    ++p;
                    it = ml.erase(it, p);
                }
                else {
                    while (!ms.empty()) {
                        --p;
                        if (*p == '('&&ms.top() == ')') ms.pop();
                        else ms.push(*p);
                    }
                    ++it;
                    it = ml.erase(p, it);
                }
                if (it == ml.end()) --it;
            }
        }
        for (it = ml.begin(); it != ml.end(); it++) printf("%c", *it);
        printf("
");
    }
    return 0;
}

 

原文地址:https://www.cnblogs.com/fenice/p/5540923.html