首页 > 学院 > 开发设计 > 正文

UVa11988

2019-11-06 06:10:05
字体:
来源:转载
供稿:网友
#include<cstdio>#include<cstring>const int maxn=100000+5;int last,cur,next[maxn];//用next[]来存放s[]中字符变动后,按照正确顺序应输出的字符所对应的下标,字符的移动实际上是next【】中所存放的s【】的下标的移动 char s[maxn];//用s【】来存放输入的字符串, 并不做任何变动              //cur表光标位置,当前光标位于s[cur]右边,next[i]表当前显示屏中,s[i]右边的字符编号,注意,是编号,即对应的是s【】中的下标 int main(){while(scanf("%s",s+1)==1){int n=strlen(s+1);//输入的字符串保存在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];//相当于链表中的插入,其中i是待插入的元素,cur是last前的最后一个字符,next[cur]即last 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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表