2021 GDUT 新生專題訓練

2021-10-22 16:51:19 字數 1305 閱讀 6682

b - 佇列和棧

佇列和棧是兩種重要的資料結構,它們具有push k和pop操作。push k是將數字k加入到佇列或棧中,pop則是從佇列和棧取乙個數出來。佇列和棧的區別在於取數的位置是不同的。

佇列是先進先出的:把佇列看成橫向的乙個通道,則push k是將k放到佇列的最右邊,而pop則是從佇列的最左邊取出乙個數。

棧是後進先出的:把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。

假設佇列和棧當前從左至右都含有1和2兩個數,則執行push 5和pop操作示例圖如下:

push 5 pop

佇列 1 2 -------> 1 2 5 ------> 2 5

push 5 pop

棧 1 2 -------> 1 2 5 ------> 1 2

現在,假設佇列和棧都是空的。給定一系列push k和pop操作之後,輸出佇列和棧中存的數字。若佇列或棧已經空了,仍然接收到pop操作,則輸出error。

input

第一行為m,表示有m組測試輸入,m<100。

每組第一行為n,表示下列有n行push k或pop操作。(n<150)

接下來n行,每行是push k或者pop,其中k是乙個整數。

(輸入保證同時在佇列或棧中的數不會超過100個)

output

對每組測試資料輸出兩行,正常情況下,第一行是佇列中從左到右存的數字,第二行是棧中從左到右存的數字。若操作過程中佇列或棧已空仍然收到pop,則輸出error。輸出應該共2*m行。

sample input

2

4push 1

push 3

poppush 5

1pop

sample output

3 5

1 5error

error

方法:這題使用雙端佇列(deque)可以很快做出來。

#include#includeusing namespace std;

int main()

else if(cnt)

else

}if(flag)

inline char minn(const char &x,const char &y)

struct node

};struct dp

dp u;

u.find(a,n,k);

return 0;

}

2021 GDUT 新生專題訓練

資料結構是利器,可以靈活運用,解決各種複雜的問題。具體內容太多不必列舉,關鍵還是思維。分析一道經典的例題 維護數列 傳送門 題目大意 給出乙個序列,要求支援插入 刪除 修改 翻轉 求和 求最大子列和。輸入運算元n 0 n 5e5 運算元量m 1 m 2e4 時間限制 1s,空間限制 128m 看我四...

2021 GDUT 新生專題訓練 資料結構

int stk n void push int value void pop int top int que n head 1,tail 0 void push int value void pop int front include include include include include ...

2019 GDUT 新生專題 I A

給定n個數字,計算出最短的連續子串行,使這個子串行的全部數字之和大於或等於給定數字s。如果不存在可以滿足題意的子串行則輸出0。這是經典的,相對比較容易的尺取問題,通過遍歷每乙個連續子串行即可得出答案。但是,由於時間的限制,要注意一些已經沒有意義的連續子串行和被重複計算的過程。include incl...