題目名稱 : 佇列重排(資料結構)
時間限制 : 1000 ms
空間限制 : 32 mb
給定乙個佇列,如,1,2,3, 其中1是隊頭,問能否通過乙個棧得到新的佇列,如得到2,3,1 是可以的,得到3,2,1也是可以的,但是得到3,1,2是不可能的。
第一行是乙個整數
n,表示佇列的元素(整數)個數, 下一行是由
n個不同
元素構成的初始佇列(第乙個是隊頭),再下一行是乙個整數
m, 接下來是需要檢查的
m行整數序列,每行由初始佇列的
n個元素構成(第乙個元素是隊頭),表示可能的重新排列。
對初始佇列元素的每個排列,如果可以通過乙個棧得到,則輸出"yes",否則輸出"no",每個輸出佔一行。3
1 23
6 1 2
3 1 3
2 2 1
3 2 3
1 3 1
2 3 2
1yes
yesyes
yes no
yes
這似乎也是個經典的問題,叫合法在出棧序列:
#include #include #include using namespace std;
int main()
int m;
cin>>m;
vector> seqs; //乙個序列組,裝著m個序列
while(m--)
seqs.push_back(seq);//將這個序列push進序列組中儲存起來
} for(int i=0;istk;
int cnt=0;
//下面開始模擬佇列v的入棧出棧
for(int j=0;jelse if(!stk.empty()&&stk.top()==seqs[i][cnt])//出棧序列頭=棧頂數字,說明可以從棧中彈出乙個數字,而佇列頭不需要出隊
else
} while(!stk.empty())
} if(stk.empty()) cout<<"yes\n";
else cout<<"no\n";
}}
出棧合法性
題目描述 已知自然數1,2,n 1 n 100 依次入棧,請問序列c1,c2,cn是否為合法的出棧序列。輸入包含多組測試資料。每組測試資料的第一行為整數n 1 n 100 當n 0時,輸入結束。第二行為n個正整數,以空格隔開,為出棧序列。對於每組輸入,輸出結果為一行字串。如給出的序列是合法的出棧序列...
出棧的合法性
1788 出棧合法性 時間限制 1 sec 記憶體限制 32 mb 提交 153 解決 60 提交 狀態 討論版 題目描述 已知自然數1,2,n 1 n 100 依次入棧,請問序列c1,c2,cn是否為合法的出棧序列。輸入 輸入包含多組測試資料。每組測試資料的第一行為整數n 1 n 100 當n 0...
棧 出棧序列合法判斷 C
題目給定乙個從1開始的連續整數列1 2 3 4 n。將上述數列按順序入棧,中途棧頂元素可以出棧。再給定乙個出棧序列,判斷此序列是否合法。例如,將n設為4。即得到數列1 2 3 4。再給定出棧序列1 3 4 2。可以看出,此齣棧序列合法。過程如下,先將數列1 2 3 4中的元素1入棧,再將其出棧。然後...