think:
一開始wa了2發, 原因是把 stack 放在的 cin >> t 前面, 不能起到 中間棧的作用, 後來放到資料中間就ac了~~~
思路:判斷 a[i] == b[j] 是否成立, 如果成立的話就更新, 否則的話 就進行判斷,
如果 棧頂元素與b[j] 相同的話就出棧 同時更新b[j];
如果 棧頂元素與b[j]不同時, 就將a[i]壓入棧中;
problem description
給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。
例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就不可能是該序列的出棧序列。假設壓入棧的所有數字均不相等。
input
第一行輸入整數n(1<=n<=10000),表示序列的長度。
第二行輸入n個整數,表示棧的壓入順序。
第三行輸入整數t(1<=t<=10)。
後面依次輸入t行,每行n個整數,表示要判斷的每乙個出棧序列。
output
對應每個測試案例輸出一行,如果由初始入棧序列可以得到該出棧序列,則輸出yes,否則輸出no。
example input
5 1 2 3 4 5
2 4 5 3 2 1
4 3 5 1 2
example output
yes
no
#include
using
namespace
std;
int main()
else
if (!s.empty() && s.top() == b[j])
else
if (i < n)
else
break;
}if (s.empty())
cout
<< "yes"
<< endl;
else
cout
<< "no"
<< endl;
}}
樣例:
1 2 3 4 5
當 要求4 5 3 2 1順序出棧時 入棧順序為 1 2 3 4 然後出棧 4 然後入棧 5;
當 要求4 3 5 1 2順序出棧時 , 因為 1 先入棧 所以 1 必定在 2後出棧(後入先出的原則) 所以時不存在的
資料結構實驗之棧七 出棧序列判定
time limit 30ms memory limit 1000k 給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4...
資料結構實驗之棧七 出棧序列判定
time limit 30ms memory limit 1000k 給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4...
資料結構實驗之棧七 出棧序列判定
這道題的演算法思想就是 讓初始的的入棧序列的第乙個入棧,然後比較棧頂元素與輸入的出棧序列比較,若不相等則讓初始得入棧序列繼續入棧,直至找到與其相等的入棧序列元素,然後將棧頂元素出棧,輸入的出棧序列向後移動乙個,再進行比較。如下 include include define maxsize 10020...