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 }