<p>题目:利用栈的后入先出判别序列正确性</p><p>分析:本题主要是模拟栈的操作,火车只有两个状态,从A到站C和从站C到B。A表示待进站的第一辆车厢,tar[B]表示出站序列中应该出站的车厢。A=tar[B]时,表示车厢入站即出。</p><p>注意:略</p>
#include <iostream>
#include <stack>
using namespace std;
const int MAXN = 1000 + 10;
int n,tar[MAXN];
int main()
{
while(scanf("%d",&n)==1){
stack<int> s;
int A = 1,B = 1;
for(int i = 1;i<=n;i++)
scanf("%d", &tar[i]);
int ok = 1;
while( B <= n){
if(A == tar[B]){ A++; B++; }
else if(!s.empty() && s.top() == tar[B])
{
s.pop(); B++;
}
else if(A <= n) s.push(A++);
else { ok = 0; break;}
}
printf("%s\n",ok ? "Yes" : "No");
}
return 0;
}