1 /*你有一个破损的键盘 可能会自动按下“【”Home键 光标移到最左端 或是“】”键End 光标移到最右端
2 现在输出显示出的文本
3 输入:This_is_a_[beiju]_text
4
5 输出 :beijuThis_is_a__text
6 */
7 #include<cstdio>
8 #include<iostream>
9 #include<cstring>
10 #include<ctime>
11 const int maxn=100000+5;
12 int last,cur,next[maxn];//、
13 char s[maxn];
14
15 int main()
16 {
17 while(scanf("%s",s+1)==1)//输入多组数据 每组数据一行
18 {
19 int n=strlen(s+1);
20 last=cur=0;
21 next[0]=0;
22 for(int i=1;i<=n;i++)
23 {
24 char ch=s[i];
25 if(ch=='[') cur=0;//字符串前还有一个虚拟的s[0] next[0]表示最左边的字符
26 else if(ch==']') cur=last;
27 else
28 {
29 next[i]=next[cur];//把i插在cur和next[cur]之间
30 next[cur]=i;
31 if(cur==last) last=i;//更新最后一个字符的编号
32 cur=i;//移动光标
33 }
34 }
35 for(int i=next[0];i!=0;i=next[i])
36 {
37 printf("%c",s[i]);
38 }
39 printf("\n");
40 printf("Time used =%.2f\n",(double)clock()/CLOCKS_PER_SEC);
41 return 0;
42 }
43 }