問題描述:
你有一個破損的鍵盤。鍵盤上所有的鍵都可以正常工作,但有時候Home鍵或者End鍵會自動按下。你並不知道鍵盤存在這一問題,而是專心打稿子,甚至連顯示器都沒打開。當你打開顯示器後,展現在你面前的是一段悲劇文本。你的任務是在打開顯示器之前計算出這段悲劇文本。
輸入包含多組數據。每組數據佔一行,包含不超過100000個字母、下劃線、字符“【”或者“】”。其中字符“【”表示Home鍵,“】”表示End鍵。輸入結束標誌爲文件結束符(EOF)。輸入文件不超過5MB。對於每組數據,輸出一行,即屏幕上的悲劇文本。
樣例輸入:
This_is_a_[Beiju]_text
樣例輸出:
BeijuThis_is_a_text
一、閱讀題目
1 已知輸入的字符串;未知輸出的字符串的順序;
2 條件:遇到“【”跳到最前邊,遇到“】”,跳到最後面;
二、擬定方案
1 頭結點爲空,開始時指向第一個節點;int cur, 0, last, char a[100], int next[100]; int n;
2 使用隊列模擬鏈表進行表示;
三、code
#include<stdio.h>
const MAXN = 10000 + 5;
int main()
{
int cur, last, n, i;
char s[MAXN];
int next[MAXN];
char ch;
while(scanf("%s", s + 1) == 1)
{
n = strlen(s + 1);
last = cur = 0;
next[0] = 0;
for(i = 1; i <= n; i++)
{
ch = s[i];
if(ch == '[')
{
cur = 0;
}else if(ch == ']')
{
cur = last;
}else
{
next[i] = next[cur];
next[cur] = i;
if(cur == last)
{
last = i;
}
cur = i;
}
}
for(i = next[0]; i != 0; i = next[i])
{
printf("%c\n", s[i]);
}
}
}
四、回顧
1 cur是當前值,i爲下一個即將添加的值;
2 節點插入爲尾節點插入:方式是插入最後的節點,然後更新current和last的值;