比赛 20251022赛前模拟1 评测结果 AAAAAAAAAA
题目名称 解压缩 最终得分 100
用户昵称 梦那边的没好TM 运行时间 0.030 s
代码语言 C++ 内存使用 3.74 MiB
提交时间 2025-10-22 11:16:59
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define foru(a,b,c) for(ll a=b;a<=c;a++)

string s;
stack<pair<bool,ll> >bt;
ll btp[505],btc[505];

string et(ll u){
    string ans="",outpt="";
    ll tis=0;
    foru(i,u+1,btp[u]-1){
        if(s[i]>='0'&&s[i]<='9'){
            tis=tis*10+s[i]-'0';
        }else if(s[i]=='['){
            ans=ans+et(i);
            i=btp[i];
        }else{
            ans=ans+s[i];
        }
    }
    foru(i,1,tis){
        outpt=outpt+ans;
    }
    return outpt;
}

int main(){
    freopen("extract.in","r",stdin);
    freopen("extract.out","w",stdout);
    cin>>s;
    ll cnt=0;
    foru(i,0,s.size()-1){
        if(s[i]=='['){
            bt.push({1,i});
            cnt=0;
        }else if(s[i]==']'){
            ll tmp=bt.top().second;
            bt.pop();
            btp[tmp]=i;
            btp[i]=tmp;
            btc[i]=btc[tmp]=cnt;
            cnt++;
        }
    }
    foru(i,0,s.size()-1){
        if(s[i]>='A'&&s[i]<='Z'){
            cout<<s[i];
        }else if(s[i]=='['){
            cout<<et(i);
            i=btp[i];
        }
    }
    return 0;
}