uva514 Rails

题意很简单,大概就是一队车从1到n逐个进站,在这个过程中位于中转站首位的车随时可以出站,给你一个序列,问是否能够顺利出站。

对于这个问题我们只需要把中间的中转站看为一个栈并对其过程进行模拟。如果栈顶就是当前应该出站的列车就直接出栈,否则继续让新车入栈。如果最终车都全部进站仍无法满足出栈条件,就说明无法达成这种序列。我们用b代表目标队形现在走的情况,用A表示当前新开进来的车的编号。

#include<bits/stdc++.h>
using namespace std;
int n,a[1005];
int main()
{
while(cin>>n)
{int A=1,b=1;
stack<int>s;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int flag=1;
while(b<=n)
{
if(A==a[b]){b++,A++}//如果当前开进来的车就是目标中正准备走的车,直接走;
else if(!s.empty()&&s.top()==a[b])//如果当前车站中有车并且就是目标要开走的车,车出栈,目标向后推移。
{
s.pop();
b++;
}
else if(A<=n)s.push(A++);//如果车还没有完全进完,并且不满足出站条件,继续进站。
else {flag=0;break;}//如果在目标走完之前车已经全部进站了,则说明不可能满足出站条件
}
if(flag==0)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}

 

posted @ 2020-09-19 00:24  徒手拆机甲  阅读(98)  评论(0)    收藏  举报