(考试大整理~)Xxy 的车厢调度x

Posted 云深不知处

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(考试大整理~)Xxy 的车厢调度x相关的知识,希望对你有一定的参考价值。

这一题我以前研究过哈哈哈~

(train.cpp/c/pas)

Description

有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 A 驶入,

再从 B 方向驶出,同时它的车厢可以重新组合。假设

从 A 方向驶来的火车有 n 节(n<=1000) ,分别按照顺

序编号为 1,2,3,…,n。假定在进入车站前,每节

车厢之间都不是连着的,并且它们可以自行移动到 B

处的铁轨上。 另外假定车站 C 可以停放任意多节车厢。

但是一旦进入车站 C,它就不能再回到 A 方向的铁轨

上了,并且一旦当它进入 B 方向的铁轨,它就不能再

回到车站 C。

负责车厢调度的 xxy 需要知道能否使它以

a1,a2,…,an 的顺序从 B 方向驶出,请来判断能否得到

指定的车厢顺序。

 

Input

输入文件的第一行为一个整数 n,其中 n<=1000,表示有 n 节车厢,第二行为 n 个数字,表

示指定的车厢顺序。

 

Output

如果可以得到指定的车厢顺序,则输出一个字符串”YES”,否则输出”NO”(注意要大写,不

包含引号) 。还有,xxy 说了 这题 AC 有糖吃。

Example

train.in train.out

5

5 4 3 2 1

YES

 

Hint

对于 50%的数据,1<=N<=20。

对于 100%的数据,1<=N<=1000。

 

解题思路:

因为车厢调度题目的意思是能不能按输入的顺序输出,

所以应该先看输入的第一个数,样例的第一个为5

所以进5辆车,此时车已经全部进完,所以接下来5号出站后,只有可能5号下面的出站,如果可以,出站,不可以的话,则输出“NO”;

 

#include<cstdio>

#include<iostream>

 

using namespace std;

 

int a[1010],b[1010];

 

int main()

{

    freopen("train.in","r",stdin);

    freopen("train.out","w",stdout);

    int n;

    scanf("%d",&n);

    for(int i=1;i<=n;++i)//进站顺序

    {

        scanf("%d",&a[i]);

    }

    int top=0;

    for(int i=1,cur=1;i<=n;++i)

    {

        while(b[top]<a[i])//cur为出站的车厢

        {

            b[++top]=cur++;

        }

        if(b[top]==a[i])

        {

            top--;

        }

        else {

            printf("NO");

            return 0;

        }

    }

    printf("YES");

    fclose(stdin);

    fclose(stdout);

    return 0;

}

 

以上是关于(考试大整理~)Xxy 的车厢调度x的主要内容,如果未能解决你的问题,请参考以下文章

解题报告

(考试大整理~)迷宫x

1357:车厢调度 (栈)

列车厢调度

车厢调度

栈的合理出栈顺序(列车厢调度)