做題的過程中,我們可以一題多解,多題一解,來比較題的差異,從而收穫很多
時間限制: 1000 ms 記憶體限制: 65536 kb
提交數: 8476 通過數: 4298
【題目描述】
有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節(n<=1000),分別按照順序編號為1,2,3,…,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦進入車站c,它就不能再回到a方向的鐵軌上了,並且一旦當它進入b方向的鐵軌,它就不能再回到車站c。
負責車廂排程的工作人員需要知道能否使它以a1,a2,…,an的順序從b方向駛出,請來判斷能否得到指定的車廂順序。
【輸入】
第一行為乙個整數n,其中n<=1000,表示有n節車廂,第二行為n個數字,表示指定的車廂順序。
【輸出】
如果可以得到指定的車廂順序,則輸出乙個字串」yes」,否則輸出」no」(注意要大寫,不包含引號)。
【輸入樣例】
55 4 3 2 1
【輸出樣例】
yes題目描述
給出兩個序列 pushed 和 poped 兩個序列,其取值從 1 到 n(n\le100000)n(n≤100000)。已知入棧序列是 pushed,如果出棧序列有可能是 poped,則輸出 yes,否則輸出 no。為了防止騙分,每個測試點有多組資料。
輸入格式
第一行乙個整數 qq,詢問次數。
接下來 qq 個詢問,對於每個詢問:
第一行乙個整數 nn 表示序列長度;
第二行 nn 個整數表示入棧序列;
第二行 nn 個整數表示出棧序列;
輸出格式
對於每個詢問輸出答案。
輸入輸出樣例
輸入 #1複製25
1 2 3 4 5
5 4 3 2 1
41 2 3 4
2 4 1 3
輸出yes
no通過讀題可以發現兩道題都是在解決同一種問題
這個出棧序列是否可以由這個序列入棧出棧後達到
所以我們可以想到:既然他告訴了我們這個序列的順序,那能不能通過這個序列模擬一下入棧出棧
如果模擬成功,出棧的順序一致,那就是對了
如果不行,那就錯了
那判斷模擬是否成功的標準是什麼?
如果這個出棧順序能由這個序列達到,那一定會怎樣?
那一定會是空棧(想一想,如果出棧後是這個順序,那麼棧一定沒東西了,那反過來,順序達不到,是不是棧裡還有元素
如果我講的不太清楚,可以結合**再看看
//車廂排程code
嘗試轉換成驗證棧序列
#include
#include
#include
#include
using
namespace std;
stack<
int> num;
int ar[
1000010];
//pushed
int ar1[
1000010];
//poped
int n;
intmain()
}if(num.
empty()
) cout<<
"yes"
"no"
(!num.
empty()
) num.
pop();
//清空棧
return0;
}
``
可能有小夥伴不太懂
stack
介紹一下
#include
//實現棧的標頭檔案
stack name;
t=int
,char
,long
long
(是資料型別
name 自己取名(不要取重名
for example
stack<
int> a;
a.push()
//在棧頂壓入乙個元素
a.pop()
//彈出棧頂元素
a.top()
//返回棧頂元素,不刪除值
a.empty()
//檢驗棧是否為空
a.size()
//返回棧的長度
驗證棧的序列 車廂排程
做題的過程中,我們可以一題多解,多題一解,來比較題的差異,從而收穫很多 時間限制 1000 ms 記憶體限制 65536 kb 提交數 8476 通過數 4298 題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 10...
1357 車廂排程 train (棧)
1357 車廂排程 train 時間限制 1000 ms 記憶體限制 65536 kb 提交數 6775 通過數 3515 題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 1000 分別按照順序編號為1,2,3,n。...
車廂排程問題 佇列和棧的實現
根據佇列和棧的性質 佇列找尾部最大的車廂號 棧找尾部最小的車廂號 棧 佇列 陣列可用stl或者自己實現 pragma once include vector.h include queue.h include stack.h include const char inputvectorfilenam...