码迷,mamicode.com
首页 > 其他好文 > 详细

4650 破损的键盘

时间:2016-08-18 23:21:46      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

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;
}

 

4650 破损的键盘

标签:

原文地址:http://www.cnblogs.com/shenben/p/5785494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!