洛谷P1928 外星密码 题解 后缀表达式

题目链接:https://www.luogu.com.cn/problem/P1928

后缀表达式模板题。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 20020;
char s[maxn];
int n;
stack<int> stk_num;
stack<string> stk_str;

int main() {
    cin >> s;
    n = strlen(s);
    stk_num.push(1);
    stk_str.push("");
    for (int i = 0; i < n;) {
        if (s[i] == '[') {
            int num = s[i+1] - '0';
            if (i+2 < n && isdigit(s[i+2])) {
                num = num * 10 + s[i+2] - '0';
                i += 3;
            }
            else i += 2;
            stk_num.push(num);
            stk_str.push("");
        }
        else if (s[i] == ']') {
            int num = stk_num.top();
            stk_num.pop();
            string str = stk_str.top();
            stk_str.pop();
            string tmp = "";
            for (int i = 0; i < num; i ++) tmp += str;
            stk_str.top() += tmp;
            i ++;
        }
        else {
            stk_str.top() += s[i++];
        }
    }
    cout << stk_str.top() << endl;
    return 0;
}
posted @ 2021-11-18 18:30  quanjun  阅读(87)  评论(0编辑  收藏  举报