• 车厢调度


    车厢调度

    (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        YES

    5 4 3 2 1

    YES

    Hint

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

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

    解题思路:

    解题思路:

    先记录下所有车的出站顺序;

    模拟n辆车厢进站的情况;若进站车厢号比出站车号小,将此车厢进栈;

    若是出站车厢号,则将此车厢不进栈,不出栈;

    若以上都不符合,则证明不符合规则,输出no;

    代码实现 :

     1 #include<iostream>
     2 using namespace std;
     3 #include<cstdio>
     4 int f[1010],head=0,z[1010];
     5 int main()
     6 {
     7     freopen("train.in","r",stdin);
     8     freopen("train.out","w",stdout);
     9     int n;
    10     cin>>n;
    11     for(int i=1;i<=n;++i)
    12         scanf("%d",&f[i]);
    13     for(int h=1,k=1;h<=n;++h)    
    14     {
    15         while(k<=f[h])  //进栈
    16         {
    17             z[++head]=k;++k;
    18         }
    19         if(z[head]==f[h])  //出站
    20         {
    21             --head;
    22         }
    23         else 
    24         {
    25             cout<<"NO";
    26             return 0;
    27         }
    28     }
    29     cout<<"YES";
    30     fclose(stdin);fclose(stdout);
    31     return 0;
    32 }
  • 相关阅读:
    贪心算法
    分治法
    递归法
    查找二 树与图的搜索
    (转载)查找三 哈希表的查找
    (转载)查找一 线性表的查找
    4.写出完整版的strcpy函数
    3.strcpy使用注意(3)
    2.strcpy使用注意(2)
    1.strcpy使用注意
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6679821.html
Copyright © 2020-2023  润新知