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
#include <iostream>
#include <cstdio>
#include <cstring>
#include <deque>
#include <vector>
using namespace std;
int main()
{
int m;
deque<int> dq;
vector<int> er;
string str;
int x;
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>str;
if(str=="LIN"){
cin>>x;
dq.push_front(x);
}else if(str=="RIN"){
cin>>x;
dq.push_back(x);
}else if(str=="LOUT"){
if(dq.empty())er.push_back(i);
else dq.pop_front();
}else if(str=="ROUT"){
if(dq.empty())er.push_back(i);
else dq.pop_back();
}
}
for(int i=0;i<dq.size();i++){
printf("%d%s",dq[i],i==dq.size()-1?"\n":" ");
}
if(er.size()>0){
for(int i=0;i<er.size();i++)
printf("%d ERROR\n",er[i]);
}
return 0;
}