UVa514 Rails(铁轨)

题意:

UVa514 Rails(铁轨)

题目:铁轨
题目链接:UVa514链接
题目描述:
某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站。例如,出栈顺序(5 4 1 2 3)是不可能的,但是(5 4 3 2 1)是可能的。

分析:
  1. 首先,要知道这是关于栈的题,而且是用来判断一段数字是否能够用入栈出栈来得出.

    1. 首先,如果A和B的数字在某个位置是相同的,比如入栈和出栈都是(1,2,3,4,5),那么也就是说,一个数字在刚刚入栈之后就出栈.
    2. 如果上述不匹配,那么就看栈中的(首先要判断栈中是否存在数字)是否和train[]中的数字匹配;如果匹配,说明这个数字要出栈;
    3. 如果上述还不匹配,那么A中的数字就要进栈;
    4. 如果上述都不匹配,说明这段数字不能够被入栈和出栈得出;
#include<iostream>
#include<stack>
#include<stdio.h>
using namespace std;
int main()
{
    int A,B;
    int n;
    while(cin>>n)
    {
        stack<int>C;
        int target[100];
        A=1;
        B=1;
        for(int i=1; i<=n; i++)
        {
            cin>>target[i];
        }
        int ok=1;
        while(B<=n)
        {
        //第一种结果
            if(A==target[B])
            {
                A++;
                B++;
            }
            //第二种结果
            else if(!C.empty()&&C.top()==target[B])
            {
                C.pop();B++;
            }
            //第三种结果
            else if(A<=n){A++;C.push(A);}
            else {
            //说明不能;
                ok=0;break;
            }
        }
        cout<<(ok?"YES":"NO")<<endl;
    }
}

此题旨在模拟,但是以上代码并没有提交测试,所以不一定正确,但思想没错.

<<endl;
}
}


此题旨在模拟,但是以上代码并没有提交测试,所以不一定正确,但思想没错.

猜你喜欢

转载自blog.csdn.net/weixin_45929885/article/details/113852590