stack和queue练习题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39427510/article/details/84769204

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 

猜你喜欢

转载自blog.csdn.net/qq_39427510/article/details/84769204