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

 



1 #include<stdio.h>
2 #include<deque>
3 #include<string.h>
4 using namespace std;
5 int main()
6 {
7 deque<int>q;
8 int t,i,j,k[100],count,a;
9 char x[20];
10 scanf("%d",&t);
11 count=0;
12 j=0;
13 while(t--)
14 {
15 scanf("%s",x);
16 if(strcmp(x,"LIN")==0)
17 {
18 scanf("%d",&a);
19 q.push_front(a);
20 count++;
21 }
22 if(strcmp("RIN",x)==0)
23 {
24 scanf("%d",&a);
25 q.push_back(a);
26 count++;
27 }
28 if(strcmp("LOUT",x)==0)
29 {
30 count++;
31 if(q.size()==0)
32 k[j++]=count;
33 else
34 {
35 q.pop_front();
36 }
37 }
38 if(strcmp("ROUT",x)==0)
39 {
40 count++;
41 if(q.size()==0)
42 k[j++]=count;
43 else
44 {
45 q.pop_back();
46 }
47 }
48 }
49 for(i=0;i<q.size();i++)
50 {
51 a=q.front();
52 printf("%d ",a);
53 q.pop_front();
54 q.push_back(a);
55 }
56 printf("\n");
57 for(i=0;i<j;i++)
58 {
59 printf("%d ERROR\n",k[i]);
60 }
61 return 0;
62 }