比赛 20241022 评测结果 AAAAAAAAAA
题目名称 解压缩 最终得分 100
用户昵称 darkMoon 运行时间 0.033 s
代码语言 C++ 内存使用 3.49 MiB
提交时间 2024-10-22 09:57:43
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define mp make_pair
using namespace std;
auto IN = freopen("extract.in", "r", stdin);
auto OUT = freopen("extract.out", "w", stdout);
auto mread = [](){int x;scanf("%lld", &x);return x;};
const int N = 505;
int n;
char s[N];
stack<int> num, l;
stack<pair<int, string>> str;
signed main(){
    scanf("%s", s + 1);
    n = strlen(s + 1);
    for(int i = 1; i <= n; i ++){
        if(s[i] == '['){
            l.push(i);
        }
        else if(s[i] == ']'){
            int sum = num.top();
            num.pop();
            string tmp = "";
            int mi;
            while(str.size() && str.top().fi > l.top()){
                mi = str.top().fi;
                for(int i = str.top().se.size() - 1; i >= 0; i --){
                    tmp.push_back(str.top().se[i]);
                }
                str.pop();
            }
            reverse(tmp.begin(), tmp.end());
            string ans = "";
            for(int j = 1; j <= sum; j ++){
                for(int k = 0; k < tmp.size(); k ++){
                    ans.push_back(tmp[k]);
                }
            }
            str.push(mp(mi, ans));
            l.pop();
        }
        else if(s[i] - '0' >= 0 && s[i] - '0' <= 9){
            int sum = 0;
            for(int j = i; j <= n; j ++){
                if(s[j] - '0' >= 0 && s[j] - '0' <= 9){
                    i ++;
                    sum = sum * 10 + (s[j] - '0');
                }
                else{
                    break;
                }
            }
            i --;
            num.push(sum);
        }
        else{
            int la = i;
            string tmp = "";
            for(int j = i; j <= n; j ++){
                if(s[j] - 'A' >= 0 && s[j] - 'A' < 26){
                    i ++;
                    tmp.push_back(s[j]);
                }
                else{
                    break;
                }
            }
            i --;
            str.push(mp(la, tmp));
        }
    }
    string tmp = "";
    while(str.size()){
        for(int i = str.top().se.size() - 1; i >= 0; i --){
            tmp.push_back(str.top().se[i]);
        }
        str.pop();
    }
    reverse(tmp.begin(), tmp.end());
    cout << tmp;
    return 0;
}