POJ_1363_模拟

题目描述:

  列车出入站是一种栈的机制,每组数据给予一个n,进站按1-n顺序,给定一组出站顺序,判断能否实现。

思路:

  直接用了queue,in记录当前准备入站的列车编号,out记录已经出站的辆数+1。

  若in == 第out辆的编号,则当前入站的直接出站。

  若栈顶的编号 == 第out辆的编号,则该车出站。

  若in < 第out辆的编号,则须将in和后面out编号之前的车全都进站。

  若in > 第out辆的编号,说明当需要出站的车被堵在车站里了。

 

#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
int a[1005];
int main()
{
    stack<int> s;
    int n;
    while(cin >> n && n)
    {
        while(cin >> a[1] && a[1])
        {
            while(!s.empty())   s.pop();
            for(int i = 2;i <= n;i++)   cin >> a[i];
            int flag = 1,in = 1,out = 1;
            while(out <= n)
            {
                if(in == a[out])
                {
                    in++;
                    out++;
                }
                else if(!s.empty() && s.top() == a[out])
                {
                    s.pop();
                    out++;
                }
                else if(a[out] > in)
                {
                    s.push(in++);
                }
                else
                {
                    flag = 0;
                    break;
                }
            }
            if(flag)    cout << "Yes" << endl;
            else    cout << "No" << endl;
        }
        cout << endl;
    }
    return 0;
}

 

posted @ 2016-09-03 13:23  zzzzzzzzhu  阅读(138)  评论(0编辑  收藏  举报