SGU 271 双端队列 和 栈 模拟

来源:互联网 发布:瑜伽教练必看书籍知乎 编辑:程序博客网 时间:2024/05/21 17:13
#include <cstdio>#include <algorithm>#include <functional>#include <iostream>#include <deque>#include <string>#include <cstring>#include <stack>using namespace std;deque<string> q;stack<string> st;char op[15];char ss[70000][15];int main() {ios::sync_with_stdio(false);bool flag = false;int i, j, n, m, k;scanf("%d%d%d", &n, &m, &k);string name = "", tmp;for (i = 0; i < n; ++i) {scanf("%s", ss[i]);}for (i = n - 1; i >= 0; --i)st.push(ss[i]);while (!st.empty() && (int)q.size() < k) {q.push_front(st.top());st.pop();}for (i = 0; i < m; ++i) {scanf("%s", op);name = "";if (op[0] == 'A') {for (j = 1; op[j - 1] != '('; ++j);while (op[j] != ')')name += op[j++];if (!flag) {q.push_back(name);while ((int) q.size() > k) {tmp = q.front();st.push(tmp);q.pop_front();}} else {q.push_front(name);while ((int) q.size() > k) {tmp = q.back();st.push(tmp);q.pop_back();}}} elseflag ^= true;}if (!flag) {while (!q.empty()) {printf("%s\n", q.back().c_str());q.pop_back();}} else {while (!q.empty()) {printf("%s\n", q.front().c_str());q.pop_front();}}while (!st.empty()) {printf("%s\n", st.top().c_str());st.pop();}return 0;}