UVa-11988-Broken Keynoard

题目:UVa 11988

题目分析:用数组会超时,所以要用链表。

 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100000 + 5;
int last ,cur, next[maxn];
char s[maxn];
int main(){
    while(scanf("%s",s+1) == 1){
        int n = strlen(s+1);
        //cout << s[0]<<s[1];
        last = cur =0;
        next[0]=0;

        for(int i = 1;i <=n; ++i){
            char ch = s[i];
            if(ch == '[') cur = 0;
            else if(ch == ']') cur = last;
            else{
                next[i] = next[cur];
                next[cur] = i;
                if(cur == last) last = i;
                cur = i;
            }
        }
        for(int i = next[0]; i !=0; i=next[i])
            cout<<s[i]<<endl;
    }

    return 0;
}

 

posted @ 2016-05-20 10:34  VictorWei  阅读(185)  评论(0)    收藏  举报