COJ 0017 20604悲剧文本
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=17
20604悲剧文本 |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
你有一个键盘,键盘上所有的键都能正常使用,只是Home键和End键有时会自动按下。你并不知道这一情况,而是专心地打稿子,甚至连显示器都没开电源。当你打开显示器之后,展现在你面前的是一段悲剧文本。你的任务是根据给出的键盘上实际输入的内容,计算并输出这段悲剧文本(即显示器上展现的文本)。 |
输入
|
一行文本不超过1000000个字符,只包括字母、下划线、字符'['(表示Home键)和字符']'(表示End键盘)。
|
输出
|
一个字符串,即符合题目描述的悲剧文本。
|
输入示例
|
This_is_a_[Beijing]_text
|
输出示例
|
BeijingThis_is_a__text
|
其他说明
|
如果你还不知道键盘上Home键和End键干什么用的,请你百度一下。
|
蒟蒻链表,但很容易写错的。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 const int maxn=1000000+10; 8 int fch,end,now,next[maxn],ms=0,v[maxn]; 9 inline int read(){ 10 int x=0,sig=1;char ch=getchar(); 11 while(!isdigit(ch)){if(ch=='-') sig=-1;ch=getchar();} 12 while(isdigit(ch)) x=10*x+ch-'0',ch=getchar(); 13 return x*=sig; 14 } 15 inline void write(int x){ 16 if(x==0){putchar('0');return;} if(x<0) putchar('-'),x=-x; 17 int len=0,buf[15]; while(x) buf[len++]=x%10,x/=10; 18 for(int i=len-1;i>=0;i--) putchar(buf[i]+'0');return; 19 } 20 void init(){ 21 return; 22 } 23 void work(){ 24 fch=0;now=0;end=0;next[fch]=-1; 25 char ch=getchar(); 26 while(1){ 27 if(ch=='[') now=fch; 28 else if(ch==']') now=end; 29 else if(isalpha(ch)||ch=='_'){ 30 next[++ms]=next[now]; 31 next[now]=ms; 32 v[ms]=ch; 33 now=ms; 34 if(next[now]==-1) end=ms; 35 } 36 else break; 37 ch=getchar(); 38 } 39 return; 40 } 41 void print(){ 42 for(int i=next[fch];i!=-1;i=next[i]) putchar(v[i]); 43 return; 44 } 45 int main(){ 46 init();work();print();return 0; 47 }