stack和queue練習題
阿新 • • 發佈:2018-12-08
1689: 2018藍橋杯培訓-STL應用專題-day 5 stack作業題2
描述
題目描述:
粗心的塔學長現在是火車站的排程員,看看現在的慘狀吧,列車車廂的順序竟然完全是亂的!為避免塔學長登上明天的UC頭條,車站劃分給塔塔一段如圖所示的鐵路,你能幫助塔塔把車廂的順序調整好嗎?
其中,A為入口,B為出口,S為中轉盲端。所有鐵道均為單軌單向式:列車行駛的方向只能是從A到S,再從S到B;另外,不允許超車。因為車廂可在S中駐留,所以它們從B端駛出的次序,可能與從A端駛入的次序不同。不過S的容量有限,同時駐留的車廂不得超過m節。
列車由編號依次為{1, 2, ..., n}的n節車廂組成。塔塔希望知道,按照以上交通規則,這些車廂能否以{a1, a2, ..., an}的次序,重新排列後從B端駛出。如果可行,應該以怎樣的次序操作?
輸入:
共兩行。
第一行為兩個整數n,m。
第二行為以空格分隔的n個整數,保證為{1, 2, …, n}的一個排列,表示待判斷可行性的駛出序列{a1,a2,…,an}。
輸出:
若駛出序列可行,則輸出操作序列,其中push表示車廂從A進入S,pop表示車廂從S進入B,每個操作佔一行。
若不可行,則輸出“震驚!昨天小湯河火車站竟然。。。”。
樣例輸入
5 2
1 2 3 5 4
樣例輸出
push pop push pop push pop push push pop pop
#include<iostream> #include<queue> #include<stack> using namespace std; int main(){ queue<int>q,q1; stack<int>s; int n,m,x; cin>>n>>m; for(int i=0;i<n;i++){ cin>>x; q.push(x); q1.push(x); } int k=1; while(!q.empty()&&s.size()<m){ s.push(k++); while(!s.empty()&&!q.empty()&&s.top()==q.front()){ s.pop(); q.pop(); } } if(!q.empty()){ cout<<"震驚!昨天小湯河火車站竟然。。。"<<endl; }else{ int k=1; while(!q1.empty()&&s.size()<m){ s.push(k++); cout<<"push\n"; while(!s.empty()&&!q1.empty()&&s.top()==q1.front()){ s.pop(); q1.pop(); cout<<"pop\n"; } } } return 0; }
good