最近几天一直在啃刘汝佳老师的算法竞赛入门经典这本书,目前在看数据结构基础这一章。这本书上的例题与深入浅出那本书相比要难一些。
写一个看了大半天的例题——破损的键盘
题目大意:当你专心打稿子的时候,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;
}