铁轨(Rails) UVa514

来源:互联网 发布:疯狂java讲义怎么样 编辑:程序博客网 时间:2024/03/29 18:32

<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;}



0 0