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;
}