火车站进站问题

能否让火车以规定顺序出栈?
有n节车厢从A驶入车站,按进站编号为1-n。你的任务是让他们按照某种特定的顺序进入B放下过的铁轨并驶出。为了重组车厢,你可以借助中转站statiom。这是一个可以停放任意多节车厢的车站,但是由于末端封顶,驶入station的车厢必须按照相反顺序驶出station。对于每个车厢,一旦从A移入station,就不能在回到A了;一旦station移入B,就不能回到Station了。
在这里插入图片描述

在这里插入图片描述
输入

多组数据 每组数据包裹2行,第一行为车厢节数n,接下来的1行是某种特定的顺序

输出

是否可以按照该顺序驶出 是输出Yes 否输出No

样例输入

5
1 2 3 4 5
5 4 1 2 3
0 //表示5结束
6
6 5 4 3 2 1
0 //表示6结束
0 //表示程序结束

样例输出

Yes
No
Yes

#include <cstdio>
#include <queue>
#include <stack>
using namespace std;
bool check_is_valid_order(queue<int> &order){
	stack<int> S;
	int n = order.size();
	for(int i=1;i<=n;i++){
		S.push(i);
		while(!S.empty() && order.front() == S.top()){
			S.pop();
			order.pop();
		}
	}
	if(!S.empty())
	return false;
	else 
	return true;
}


int main()
{
	int n;
	int train;
	scanf("%d",&n);
	while(n){
		scanf("%d",&train);
		while(train){
		queue<int> order;
		order.push(train);
		for(int i=1;i<n;i++)
		{
			scanf("%d",&train);
			order.push(train);
		}
		if(check_is_valid_order(order)){
			printf("Yes\n");
		}
		else{
			printf("No\n");
		}
		scanf("%d",&train);
		}
		printf("\n");
		scanf("%d",&n);
	}
	return 0;
 } 

来自
http://poj.org/problem?id=1363

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值