Yes
代码如下:这题很简单,我把思路都注释在了代码上了!
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
int n,bs[2014];
int main()
{
while(cin>>n,n)
{
while(cin>>bs[1],bs[1])
{
stack<int>Q;
int flag=1;
for(int i=2; i<=n; i++)
cin>>bs[i];//输入从B车站出去的顺序!
int A=1,B=1;
while(B<=n)
{
if(A==bs[B])
A++,B++;//如果是一个一个进出站台的话!说明车厢直接出栈
else if(!Q.empty()&&Q.top()==bs[B])//在A站的火车按某个顺序进站C之后,
//在C站的最后一个火车编号如果和当前在B站的第一个火车编号一样的话!就表明符合要求!出栈操作!
Q.pop(),B++;
else if(A<=n)//开辟一个栈,按顺序存储当前比bs[i]小的车厢
Q.push(A++);
else
{
flag=0;
break;//都不符合的话,就.......
}
}
printf("%s\n",flag?"Yes":"No");
}
cout<<endl;
}
return 0;
}
原文地址:http://blog.csdn.net/u014004096/article/details/38265847