zoukankan      html  css  js  c++  java
  • GRYZ 模 拟 赛 系 列 Xxy 的车厢调度

    Xxy 的车厢调度
    (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。

    思lu:这个栈不会上溢,所以不能成立的原因只有当要出车1的时候上边有车2等阻拦;

    Top作为栈顶所以当B数组为当前需要top到达的车的位置,stack[top-1]==0&&top!=b[i])||top-1==b[i]时top—若top最后==车则本次可以成立不等则判断否return

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<string>
     6 using namespace std;
     7 int b[1003];
     8 int top=1,n;
     9 bool flag=false;
    10 int stack[1003];
    11 void mdzz()
    12 {
    13     for(int i=1;i<=n;i++)
    14     {
    15         if(top<b[i])
    16         {
    17             while(top != b[i])
    18             {
    19              top++;
    20             }
    21         stack[b[i]]=0;    
    22         }
    23         else if(top>b[i])
    24         {
    25             while((stack[top-1]==0&&top!=b[i])||top-1==b[i])
    26             {
    27                 top--;
    28             }
    29             if(top!=b[i])
    30             {
    31                 flag=true;
    32                 return;
    33             }
    34             else stack[b[i]]=0;
    35         }
    36         
    37     }
    38 }
    39 int main()
    40 {
    41     freopen("train.in","r",stdin);
    42     freopen("train.out","w",stdout);
    43     scanf("%d",&n);
    44     for(int i=1;i<=n;i++)
    45     {
    46         stack[i]=1;
    47         scanf("%d",&b[i]);
    48     }
    49     mdzz();
    50     if(flag==1)printf("NO");
    51     else printf("YES");
    52     fclose(stdin);
    53     fclose(stdout);
    54     return 0;
    55 }
  • 相关阅读:
    zabbix验证微信
    free
    有名管道和无名管道
    shell实现并发控制
    TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集
    自动化运维
    JSON对象(自定义对象)
    对象中属性的遍历、删除与成员方法
    对象间的赋值操作
    自定义类
  • 原文地址:https://www.cnblogs.com/sssy/p/6679640.html
Copyright © 2011-2022 走看看