• 双向队列


    双向队列

    Description

          想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
    <o:p></o:p>现在给你一系列的操作,请输出最后队列的状态;
    <o:p></o:p>命令格式:
    <o:p></o:p>LIN X  X表示一个整数,命令代表左边进队操作;
    <o:p></o:p>RIN X  表示右边进队操作;
    <o:p></o:p>ROUT
    <o:p></o:p>LOUT   表示出队操作;<o:p></o:p>

    Input

    第一行包含一个整数M(M<=10000),表示有M个操作;
    <o:p></o:p>以下M行每行包含一条命令;
    <o:p></o:p>命令可能不合法,对于不合法的命令,请在输出中处理;<o:p></o:p>

    Output

    输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;
    <o:p></o:p>以下若干行处理不合法的命令(如果存在);
    <o:p></o:p>对于不合法的命令,请输出一行X ERROR
    <o:p></o:p>其中X表示是第几条命令;<o:p></o:p>

    Sample

    Input 

    8
    LIN 5
    RIN 6
    LIN 3
    LOUT
    ROUT
    ROUT
    ROUT
    LIN 3

    Output 

    3
    7 ERROR

    Hint

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     char a[100];
     8     int num[100100];
     9     int qwe[10010];
    10     int e1=10050;
    11     int e2=10050;
    12     int flog=0;
    13     int p;
    14     for(int i=1; i<=n; i++)
    15     {
    16         scanf("%s",a);
    17         if(strcmp(a,"LIN")==0)
    18         {
    19             scanf("%d",&p);
    20             num[e1--]=p;
    21         }
    22         else if(strcmp(a,"RIN")==0)
    23         {
    24             scanf("%d",&p);
    25             num[++e2]=p;
    26         }
    27         else if(strcmp(a,"LOUT")==0)
    28         {
    29             if(e1>=e2)//说明没有数了
    30             {
    31                 qwe[flog++]=i;//出现不满足的情况
    32                 e1=10050;//恢复原值
    33                 e2=10050;//恢复原值
    34             }
    35             else
    36             {
    37                 e1++;
    38             }
    39         }
    40         else
    41         {
    42             if(strcmp(a,"ROUT")==0)
    43             {
    44                 if(e1>=e2)
    45                 {
    46                     qwe[flog++]=i;
    47                     e1=10050;
    48                     e2=10050;
    49                 }
    50                 else
    51                 {
    52                     e2--;
    53                 }
    54             }
    55         }
    56     }
    57     if(e1<e2)
    58     {
    59         for(int i=e1+1; i<=e2; i++)
    60         {
    61             if(i==e2)
    62                 printf("%d
    ",num[i]);
    63             else
    64             {
    65                 printf("%d ",num[i]);
    66             }
    67         }
    68     }
    69     for(int i=0; i<flog; i++)
    70     {
    71         printf("%d ERROR
    ",qwe[i]);
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service
    转载-logbock.xml
    sql学习指南--持续更新
    转载-有时间担心中年危机,还不如用忧虑的时间来提升自己——再论程序员该如何避免所谓的中年危机
    转载-缓存
    转载-SpringBoot开发案例之整合日志管理
    转载-Spring Boot应用监控实战
    乐观锁 与 悲观锁
    独占锁 和 共享锁
    自旋锁
  • 原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12372878.html
Copyright © 2020-2023  润新知