1682: 【入门】双向队列(1789)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:48 解决:16

题目描述

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

输入

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

输出

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

样例输入 复制

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

样例输出 复制

3
7 ERROR

提示

#include<bits/stdc++.h>
using namespace std;

deque<int> d;
vector<int> e;
int m,i,t;
string op;
int main(){
    cin>>m;
    for (i=1;i<=m;i++) {
    	cin>>op;
    	if (op=="LIN") {
    		cin>>t;
    		d.push_front(t);
		}else if(op=="RIN") {
			cin>>t;
			d.push_back(t);
		}else if(op=="LOUT") {
			if (d.size()==0) 
				e.push_back(i);
			else
			    d.pop_front();
		}else if(op=="ROUT") {
			if (d.size()==0) 
                e.push_back(i);
			else
			    d.pop_back();
		}
	}
	for (i=0;i<d.size();i++)
	    cout<<d[i]<<" ";
	cout<<endl;
	for (i=0;i<e.size();i++)
	    cout<<e[i]<<" ERROR\n";
	return 0;
}