4650 破损的键盘

4650 破损的键盘

 

 时间限制: 1 s
 空间限制: 16000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

有一天,你需要打一份文件,但是你的键盘坏了,上面的"home"键和"end"键会时不时地按下,而你却毫不知情,甚至你都懒得打开显示器,当你打开显示器之后,出现在你的面前的是一段悲剧的文本。

输入描述 Input Description

输入只有一行,即这份文件,这份文件只包含小写字母和'['以及']',用'['代替"home"键,用']'代替"end"键。

输出描述 Output Description

你的任务是在打开显示器之前,计算出这份悲剧的文档。

样例输入 Sample Input

kdg[gek]h[itj

de[co]vs

样例输出 Sample Output

itjgekkdgh

codevs

数据范围及提示 Data Size & Hint

包含多组测试数据,直到文件结束。

字符串长度小于10000个字符。

不包含空格。

分类标签 Tags 点此展开 

 
暂无标签
 
链表WA到挺的代码:
#include<bits/stdc++.h>
using namespace std;
#define N 10010
char s[N];
int l,r,n[N];
int main(){
    while(scanf("%s",s+1)==1){
        l=0;r=0;
        memset(n,0,sizeof n);
        int len=strlen(s+1);
        for(int i=1;i<=len;i++){
            if(s[i]=='[') l=0;
            else if(s[i]==']') l=r;
            else{
                n[i]=n[l];
                n[l]=i;
                if(l==r) r=i;
                l=i;
            }
        }
        for(int i=n[0];i;i=n[i]) putchar(s[i]);
    }
    return 0;
}

 

AC代码:(模拟)
#include<cstdio>
#include<cstring>
#define N 10001
using namespace std;
int n,l,x;
char s[N],a[N];
int main(){
    while(scanf("%s",s+1)!=EOF){
        x=0;
        l=strlen(s+1);int len=l+1;
        while(len>=1){
            len--;
            while(len>=1&&s[len]!='[') len--;
            for(int i=len+1;s[i]!=']'&&i<=l;i++) if(s[i]&&s[i]!='[') a[++x]=s[i],s[i]=0;    
        }
        for(int i=1;i<=x;i++) printf("%c",a[i]);    
        for(int i=1;i<=l;i++) if(s[i]&&s[i]!='['&&s[i]!=']') printf("%c",s[i]);            
        printf("\n");
    }
    return 0;
}

 

posted @ 2016-08-18 21:43  神犇(shenben)  阅读(541)  评论(0编辑  收藏  举报