1. 程式人生 > >Broken Keyboard (a.k.a. Beiju Text) (靜態連結串列)

Broken Keyboard (a.k.a. Beiju Text) (靜態連結串列)

【題意】
你有一個破損的鍵盤,鍵盤上所有的鍵都可以正常工作,但有時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; }