记录编号 47128 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010冲刺十三]外星密码 最终得分 100
用户昵称 Gravatar王者自由 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2012-10-30 22:02:11 内存使用 3.29 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <string>
#include <stack>
#include <algorithm>
using namespace std;
const int N = 20000 + 10;
struct fu {
    int p;
    string c;
} e;
stack<fu> s;
char c[N];
string t;
inline bool num(char x) {
    return x >= '0' && x <= '9';
}
int main() {
    freopen("passworda.in", "r", stdin);
    freopen("passworda.out", "w", stdout);
    gets(c);
    for(int i=0; c[i]; i++) {
        if(c[i] == '[') {
            e.p = 0, e.c = "";
            for(i++; num(c[i]); i++)
                e.p = e.p * 10 + (c[i] - '0');
            while(c[i] != '[' && c[i] != ']')
                e.c += c[i++];
            //fprintf(stderr, "(%d %s)\n", e.p, e.c.c_str());
            s.push(e); i--;
        } else if(c[i] == ']') {
            e = s.top();
            //fprintf(stderr, "{%d %s}\n", e.p, e.c.c_str());
            for(int j=1; j<e.p; j++)
                s.top().c += e.c;
            e = s.top(); s.pop();
            //fprintf(stderr, "[%d %s]\n", e.p, e.c.c_str());
            if(s.empty()) t += e.c;
            else  s.top().c += e.c;
        } else if(s.empty()) {
            t += c[i];
        } else {
            s.top().c += c[i];
        }
    } printf("%s\n", t.c_str());
    return 0;
}