zoukankan      html  css  js  c++  java
  • 双向队列 分类: 栈和队列 2015-06-18 17:09 12人阅读 评论(0) 收藏

    双向队列

    TimeLimit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

    题目描述

    想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。

    现在给你一系列的操作,请输出最后队列的状态;

    命令格式:

    LINX X表示一个整数,命令代表左边进队操作;

    RINX 表示右边进队操作;

    ROUT

    LOUT 表示出队操作;

    输入

    第一行包含一个整数M(M<=10000),表示有M个操作;

    以下M行每行包含一条命令;

    命令可能不合法,对于不合法的命令,请在输出中处理;

    输出

    输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;

    以下若干行处理不合法的命令(如果存在);

    对于不合法的命令,请输出一行XERROR

    其中X表示是第几条命令;

    示例输入

    8

    LIN5

    RIN6

    LIN3

    LOUT

    ROUT

    ROUT

    ROUT

    LIN3

    示例输出

    3

    7ERROR

    #include <map>
    #include <set>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <time.h>
    #include <cstdio>
    #include <cctype>
    #include <vector>
    #include <string>
    #include <climits>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #define RR freopen("input.txt","r",stdin)
    #define WW freopen("output.txt","w",stdout)
    #define INF 0x3f3f3f3f
    
    using namespace std;
    
    const int Max=30000;
    
    int a[Max];
    
    int b[10000];
    
    int L,R,top;
    
    int main()
    {
        int n,data;
        char s[10];
        top=0;
        L=Max/2;
        R=Max/2;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%s",s);
            if(strcmp(s,"LIN")==0)
            {
                scanf("%d",&data);
                a[--L]=data;
            }
            else if(strcmp(s,"RIN")==0)
            {
                scanf("%d",&data);
                a[R++]=data;
            }
            else if(strcmp(s,"LOUT")==0)
            {
                if(L<R)//<span style="font-family:华文楷体, serif;">判断是否合法</span>
                {
                    L++;
                }
                else
                {
                    b[top++]=i;
                }
            }
            else if(strcmp(s,"ROUT")==0)
            {
                if(L<R)
                {
                    R--;
                }
                else
                {
                    b[top++]=i;
                }
            }
        }
        if(L<R)
        {
            for(int i=L; i<R; i++)
            {
                if(i!=L)
                    cout<<" ";
                cout<<a[i];
            }
            cout<<endl;
        }
        for(int i=0; i<top; i++)
        {
            cout<<b[i]<<" "<<"ERROR"<<endl;
        }
        return 0;
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/juechen/p/4722018.html
Copyright © 2011-2022 走看看