寒假第四篇

最近几天一直在啃刘汝佳老师的算法竞赛入门经典这本书,目前在看数据结构基础这一章。这本书上的例题与深入浅出那本书相比要难一些。

写一个看了大半天的例题——破损的键盘

题目大意:当你专心打稿子的时候,Home键和End键有时会自动按下,'['表示Home键,']'表示End键,输出屏幕上的悲剧文本。

样例输入:This_is_a_[Beiju]_text

样例输出:BeijuThis_is_a__text

代码如下:

#include<cstdio>
#include<cstring>
const int maxn=100000+5;
int cur,last;//cur表示光标位置
int next[maxn];
char s[maxn];
int main(){
while(scanf("%s",s+1)==1)//从s[1]开始输入
{cur=last=0;
next[0]=0;
int n=strlen(s+1);
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])
printf("%c",s[i]);
printf("\n");
}return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值