1682: 【入门】双向队列(1789)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:48
解决:16
题目描述
想想双向链表……双向队列的定义差点儿相同,也就是说一个队列的队尾同一时候也是队首。两头都能够做出队,入队的操作。
如今给你一系列的操作。请输出最后队列的状态;
命令格式:
LIN X X表示一个整数,命令代表左边进队操作;
RIN X 表示右边进队操作;
ROUT 表示右边出队操作;
LOUT 表示从左边出队操作。
如今给你一系列的操作。请输出最后队列的状态;
命令格式:
LIN X X表示一个整数,命令代表左边进队操作;
RIN X 表示右边进队操作;
ROUT 表示右边出队操作;
LOUT 表示从左边出队操作。
输入
第一行包括一个整数M(M<=10000),表示有M个操作;
下面M行每行包括一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;
下面M行每行包括一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;
输出
输出的第一行包括队列进行了M次操作后的状态。从左往右输出,每两个之间用空格隔开。
下面若干行处理不合法的命令(假设存在);
对于不合法的命令。请输出一行X ERROR
当中X表示是第几条命令;
下面若干行处理不合法的命令(假设存在);
对于不合法的命令。请输出一行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; }