sdut1466 双向队列

Problem Description

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

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

命令格式:

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

RIN X  表示右边进队操作;

ROUT

LOUT   表示出队操作;

Input

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

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

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

Output

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

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

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

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

Sample Input

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

Sample Output

3
7 ERROR

/*
    deque<ll>q;//定义一个双向队列q,类型为long long
    q.push_front(a);//将a从队首插入队列
    q.push_back(a);//将a从队尾插入队列
    q.pop_front();//队首弹掉一个元素
    q.pop_back();//队尾弹出一个元素
    a=q.front();//返回队首元素
    a=q.back();//返回队尾元素
    a=q.size();//返回双向队列的大小
    a=q.empty();//判断双向队列是否为空,为空返回1,不为空返回0
    deque<ll>p(q);//将队列q复制一个新的队列p
    q.clear(); //将队列q清空
    */

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<queue>
    #include<string.h>
    using namespace std;
    char str[10];
    int main()
    {
        int m,a;
        deque<int> q;
        vector<int> v;
        scanf("%d",&m);
        for(int i=1;i<=m;i++){
            scanf("%s",str);
            if(strcmp(str,"LIN")==0){
                scanf("%d",&a);
                q.push_front(a);
            }else if(strcmp(str,"RIN")==0){
                scanf("%d",&a);
                q.push_back(a);
            }else if(strcmp(str,"LOUT")==0){
                if(q.empty())
                    v.push_back(i);
                else
                    q.pop_front();
            }else if(strcmp(str,"ROUT")==0){
                if(q.empty())
                    v.push_back(i);
                else
                    q.pop_back();
            }
        }
        bool flag=false;
        while(!q.empty()){
            if(flag){
                printf(" %d",q.front());
            }
            else{
                 printf("%d",q.front());
                 flag=true;
            }
            q.pop_front();
        }
        printf("\n");
        int len=v.size();
        for(int i=0;i<len;i++){
            printf("%d ERROR\n",v[i]);
        }
        return 0;
    }


/***************************************************
Result: Accepted
Take time: 4ms
Take Memory: 200KB
Submit time: 2018-05-12 
****************************************************/



猜你喜欢

转载自blog.csdn.net/qq_37275680/article/details/80292626
今日推荐