已知自然數1,2,...,n(1≤n≤10000)依次入棧(即a1
,c2,...,cn
是否為可能的出棧序列。
例如:n=5時,3,4,2,1,5是乙個可能的出棧序列,因為其可以按如下操作獲得:push 1,push 2,push 3,pop,push 4,pop,pop,pop,push 5,pop
input
輸入資料報含若干組測試樣例。
每組測試樣例的第一行為整數n(1≤n≤10000);
第二行為n個正整數,以空格隔開,為出棧序列;
輸入資料的末尾以乙個0表示輸入的結束。
output
對於每組測試樣例,輸出結果為一行字串。
如給出的序列是可能的出棧序列,則輸出"yes",否則輸出"no"。
注意:區分大小寫,引號本身不輸出。
sample input
53 4 2 1 5
53 5 1 4 2
0
sample output
yesno
#include#include#include
#include
using
namespace
std;
intmain()
;
intn,flag,i,j,top;
while(1
)
else}}
if(flag==1
) printf(
"yes\n");
else
printf(
"no\n");
}return0;
}
第二種方法
#include #include#include
#include
#include
#include
using
namespace
std;
intmain()
if(s1.empty()&&s3.empty())
if(s3.empty())
s3.push(d++);
else
if(s3.top()!=s1.top())
s3.push(d++);
if(d==n+2
)
break
; }
if(flag)
printf(
"yes\n");
else
printf(
"no\n");
}}
發表於
2017-04-17 13:22
aacm 閱讀(
...)
編輯收藏
重新整理頁面
返回頂部
棧 出棧序列判定
給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就...
由入棧 出棧序列求所有出棧 入棧序列
給出乙個陣列,代表入棧順序,求所有出棧可能性?給出乙個陣列,代表出棧順序,求所有入棧可能性?這兩題解法相同,可利用全排列求出所有組合,再進行可能性分析。全排列 如下 public list permute int nums 這種方法是什麼意思呢?例如abc,在第0位有三種可能,axx,bxx,cxx...
出棧序列統計
問題描述 棧是常用的一種資料結構,有 n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push 和pop 前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的 n,計算並輸出由運算元序列...