UVa514 Rails (栈)

题意:一列有n节车厢的火车按顺序进站,给你一个出站顺序,问你该火车的车厢能否以该顺序出站?

分析:出站的车厢满足后进先出的关系,所以我们考虑采用栈s

假设车厢一共有n节,n = 5;

进站顺序A:1 2 3 4 5

出站顺序B/target: 2 3 4 5 1

如果进站的车厢没有立马出站,则将该车厢入栈s.push(A++)

判断栈里面车厢的顺序是否和出站顺序一致 s.top()==  target[B] 

#include<cstdio>
#include<stack>
using namespace std;
int main()
{
    int n,target[1005];
    stack<int>s;
    while(~scanf("%d",&n)&&n)
    {
        while(1){
        int flag = 0;
        for(int i=1;i<=n;i++)
            {
                scanf("%d",&target[i]);
                if(target[i] == 0)
                {
                    flag = -1;
                    break;
                }
            }
        if(flag == -1)
        {
            printf("
");
            break;
        }
        int A=1,B=1;
        while(B <= n)
        {
            if(A == target[B]){A++;B++;}
            else if(!s.empty()&&s.top()==target[B]){B++;s.pop();}
            else if(A <= n) s.push(A++);
            else {flag =-1; break;}
        }
        if(flag == -1)
            printf("No
");
        else
            printf("Yes
");
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/LLLAIH/p/10374331.html