题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19641
题目大意:某地有一个火车站,如图,有n节车厢从A驶向B,n节车厢编号1~n,你的任务是能否让他们按照你输入的顺序进入到B方向的铁轨(有点像詹天佑的之字形铁轨)
完全符合栈的后进先出(LAST IN FIRST OUT) 例如出栈顺序54123不可以,但是54321 可以(先从A依次驶入Station,然后5就变成了”车头“,以54321驶出入B);
【代码如下】
#include <iostream>
#include <stack>
#define maxn 1010
using namespace std;
int num[maxn];
int main()
{
int n;
while(cin>>n&&n)
{
int sign=0;
while(1)
{
stack<int>s;
for(int i=1;i<=n;i++)
{
cin>>num[i];
if(num[1]==0)
{
sign=1;
break;
}
}
if(sign)
break;
int ok=1;
int A=1,B=1;//参照了lrj书上的写法 (A代表每节车厢,B则代表给定出栈顺序的下标)
while(B<=n)
{
if(A==num[B]){A++;B++;}
else if(!s.empty()&&s.top()==num[B]){s.pop();B++;}
else if (A<=n) {s.push(A++);}
else { ok = 0;break;}
}
if(ok)
cout<<"Yes\n";
else
cout<<"No\n";
}
cout<<"\n";
}
return 0;
}