UVA - 514 - Rails

原命题链接:PDF/Vjudge

[TOCM]

题意

题目的意思是将A方向开过来的火车(顺序编号不一定),借助C轨道,全部按照递增序列驶出B轨道,
  设计程序判断是否可以实现。
  注意的是,一列火车不能往回开,也就是只允许A->C,C->B。

♠题外话♠

说实话,不怕彰显我笨的潜质,总是感觉紫书上的代码不对劲啊,没有按照要求实现问题啊,有没有,逃了,小白吐槽。不过我就是抄,我也不信我眼瞎抄错了无数遍!

题解思路

根据题目的描述,我们知道这个C轨道其实符合栈的定义,先进后出。
  列车有两种选择,要么是正好轮到他这个编号出列,要么不轮到他,到C轨道待命,只要进了 C轨道,就是入栈了。

代码

#include <bits/stdc++.h>

using namespace std;

int main()
{
    //freopen("t.txt", "w", stdout);
    int n;
    while (cin >> n && n)
    {
        int tar[2000] = { 0 };
        int A = 1, B = 1;
        int temp;
        bool can = true;
        while (cin >> temp && temp)
        {
            tar[1] = temp;
            for (int i = 2; i <= n; i++)
            {
                cin >> tar[i];
            }
            A = 1, B = 1;
            //if (!tar[1])
            //    break;
            stack<int> l;
            can = true;
            while (B <= n)
            {
                if (A == tar[B])
                {
                    A++;
                    B++;
                }
                else if (!l.empty() && l.top() == tar[B])
                {
                    l.pop();
                    B++;
                }
                else if (A <= n)
                {
                    l.push(A++);
                }
                else
                {
                    can = false;
                    break;
                }
            }
            if (can)
                cout << "Yes" << endl;
            else
                cout << "No" << endl;
        }
        cout << endl;
    }
    //system("PAUSE");
    return 0;
}

相关推荐