題目大意:判斷乙個出棧序列能不能從1,2,3,……,n 經過棧處理後生成。
思路:ⅰ:定理:出棧序列不合法 <=> 存在k,滿足i。(i,j,k是入站順序,s[i],s[j],s[k]是出棧順序)。
如果用這個定理判斷則需要o(n^3)的時間,不合適。
②如果當前棧頂元素是下乙個要出棧元素則讓它出棧。
③否則把當前元素進棧來看下乙個
當要進棧的所有元素都處理後,依次彈出棧內元素,如果有和出棧元素不符的則出棧序列不合法。
#include #include #include #include using namespace std;int s[1010];
int main()
for (int i = 1; i < n; i ++)
int b = 0;
int i = 0;
while (i < n)
else if (!t.empty() && t.top() == s[b])
else
}int ok = 1;
while(!t.empty() && b < n)
t.pop();
b ++;
}if (ok) cout<<"yes\n";
else cout<<"no\n";
}cout<
POJ 1363 Rails 判斷出棧序列是否合法
題目大意 判斷乙個出棧序列能不能從1,2,3,n 經過棧處理後生成。思路 定理 出棧序列不合法 存在k,滿足i。i,j,k是入站順序,s i s j s k 是出棧順序 如果用這個定理判斷則需要o n 3 的時間,不合適。如果當前棧頂元素是下乙個要出棧元素則讓它出棧。否則把當前元素進棧來看下乙個 當...
POJ 1363 Rails 解題報告
poj 1363 rails 解題報告 題目的意思是給出一組數,問你是不是一組合法的出棧序列。我有兩個思路 1 每個已出棧之後的數且小於此數的數都必須按降序排列。複雜度o n 2 2 另乙個思路就是直接模擬入棧出棧過程。雖然模擬毫無技巧可言,但複雜度o n 優於演算法1。12 include cst...
poj 1363 Rails 解題報告
題意 有一列火車,車廂編號為1 n,從a方向進站,向b方向出站。現在進站順序確定,給出乙個出站的順序,判斷出站順序是否合理。實際上是模擬棧的過程,而棧的特點是先進後出。另外乙個麻煩的地方就是輸入輸出格式問題。本題實現提供兩種方法 沒有用到stl棧和有用到stl棧 1 include 法二 標頭檔案多...