#include <bits/stdc++.h>
using namespace std;
string s, tmp;
string num, sum, res;
int fid = 0;
bool judNum(char a)
{
if ('0' <= a && a <= '9') return true;
return false;
}
string flatStr(string t) // 模拟展开一层
{
reverse(t.begin(), t.end());
int i=0, p=1;
num.clear(), sum.clear(), res.clear(); // 清空
while (judNum(t[i])) num += t[i], i ++; // 取得数字
if (!num.empty()) p = atoi(num.c_str()); // 没有就默认 p = 1
while (i < t.size() && i != ']')
{
res += t[i];
i ++;
} // 得到一个小单元 res
while (p --)
{
sum += res; // 累加
}
return sum;
}
// 模拟法
int main ()
{
int i=0, len;
cin >> s; //已知 [数 一定定于 ]数
fid = s.find(']',fid);//
while (fid != string::npos)
{
tmp.clear();
i = fid-1;
while (s[i] != '[')
{
tmp += s[i];
i --; // tmp = NUF3
}
len = tmp.size(); // +2
s.insert(fid+1,flatStr(tmp)); // 在原来的后面插入展开的字符串
s.erase(i,len+2); // 删除原来的 [3FUN]
fid = s.find(']',i); // 查找下一个 ]
}
cout << s;
return 0;
}
/*
错的数据
GDWKUW[49C[50O]OY][37W[82WOTYG]]M
*/
实在是找不出来为什么wa 看了第六个测试点 用手模拟了一下 还是找不出为什么 第六个测试点 GDWKUW[49C[50O]OY][37W[82WOTYG]]M