双向队列

来源:互联网 发布:政府购买社会服务数据 编辑:程序博客网 时间:2024/05/01 05:25

双向队列

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

8LIN 5RIN 6LIN 3LOUTROUTROUTROUTLIN 3

示例输出

37 ERROR

提示

 

来源

wanglin
#include<bits/stdc++.h>using namespace std;int main(){    int data,L,R;    int a[20020],row[10010]; //a[] 用一个折半的数组表示双端队列,row[]记录操作错误行信息    int n,k;    string str;    cin>>n;    memset(row,0,sizeof(row));    L=R=20020/2;    k=0;    while(n--)    {        k++;        cin>>str;        if(str=="LIN")        {            cin>>data;            a[--L]=data;        }        if(str=="RIN")        {            cin>>data;            a[R++]=data;        }        if(str=="LOUT")        {            if(L<R)            L++;            else                row[k]=1;        }        if(str=="ROUT")        {            if(L<R)                R--;            else               row[k]=1;        }    }    if(L<R)    {        for(int i=L; i<R; i++)        {            if(i!=L)                cout<<" ";            cout<<a[i];        }        cout<<endl;    }    for(int i=0;i<k;i++)    {        if(row[i]==1)            cout<<i<<" "<<"ERROR"<<endl;    }}


0 0
原创粉丝点击