附上原题链接:http://vjudge.net/problem/POJ-1363
题意:已知火车要从A站入站,再从C站出站,最后才从B站出。即A->C,C->B。
分析:此题直接模拟栈即可。把C站看做是一个栈,然后火车的车厢按顺序入栈,如果栈顶的火车编号与出站的火车编号一样,那么就出栈,直到栈里边所有满足出站顺序的火车都出站,否则就一直入栈。最后判断火车是否都出站了,如果都出站了就输出Yes,否则输出No。如果一开始就遇到0,则直接下一行。
#include<iostream>
#include<stack>
using namespace std;
int main(){
int a[1000];
int n,i,j;
while(cin>>n,n){
stack<int>s;
while(cin>>a[0],a[0]){
for(i=1;i<n;i++){
cin>>a[i];
}
for(i=1,j=0;i<=n;i++){
s.push(i);
while(s.top()==a[j]){
if(!s.empty())s.pop();
j++;
if(s.empty())break;
}
}
if(j==n)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
cout<<endl;
}
return 0;
}