POJ 1363.Rails(stack)

Rails

题目链接-Rails
在这里插入图片描述
在这里插入图片描述
题目大意
给出已知火车从1-n依次进站,给出一组出站顺序,判断是否能实现该火车出站顺序

解题思路
STL里stack的应用,检验是否正常入栈出栈即可
每一个已出栈之后的数且小于此数的数都必须按降序排列
由于大于x的元素后于x入栈,小于x的值先于x入栈;所以任意数x出栈前,大于x的数必定不在栈内,即栈内的数值必须小于x,
模拟即可

附上代码

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
int a[1010];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	
	int n;
	while(cin>>n&&n){
		stack<int> st;
		while(cin>>a[0]&&a[0]){
			for(int i=1;i<n;i++)
				cin>>a[i];//输入期望出站顺序
			int t=0; 
			for(int i=1;i<=n;i++){
				st.push(i);//进栈
				while(st.top()==a[t]){//判断栈顶元素是否匹配
					if(!st.empty())
						st.pop();//栈不为空就出栈
					t++;//以判断下一个位置
					if(st.empty())
						break;//栈空结束循环
				}
			}
			if(t==n)//判断是否全部匹配
				cout<<"Yes"<<endl;
			else
				cout<<"No"<<endl;
		}
		cout<<endl;
	}
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值