Broken Keyboard (a.k.a. Beiju Text) (靜態連結串列)
阿新 • • 發佈:2019-02-14
【題意】
你有一個破損的鍵盤,鍵盤上所有的鍵都可以正常工作,但有時Home鍵和End鍵會自動按下,你不知道鍵盤存在這樣的問題,當你輸入完成以後螢幕上顯示的是一串混亂的文字,你的任務是要輸出這段混亂的文字是什麼
【輸入格式】
多組輸入,每組輸入一行字串,其中 ‘[ ’ 代表Home鍵,’ ]’代表End鍵
【輸出格式】
每組資料輸出一行,即在螢幕上顯示的文字
【思路】
用靜態連結串列模擬,cur記錄當前游標位置,last記錄連結串列當前最後一個節點的位置,隨著輸入不斷更新即可
#include<cstdio>
using namespace std;
const int maxn=100050;
char s[maxn];
int next[maxn];
int cur,last;
int main(){
while(scanf("%s",1+s)==1){
cur=last=0;
next[0]=-1;
for(int i=1;s[i];++i){
if(s[i]=='[') cur=0;
else if(s[i]==']') cur=last;
else{
if(cur==last) last=i;
next [i]=next[cur];
next[cur]=i;
cur=i;
}
}
for(int i=next[0];i!=-1;i=next[i]){
printf("%c",s[i]);
}
puts("");
}
return 0;
}