双向队列
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
Hint
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int n; 6 scanf("%d",&n); 7 char a[100]; 8 int num[100100]; 9 int qwe[10010]; 10 int e1=10050; 11 int e2=10050; 12 int flog=0; 13 int p; 14 for(int i=1; i<=n; i++) 15 { 16 scanf("%s",a); 17 if(strcmp(a,"LIN")==0) 18 { 19 scanf("%d",&p); 20 num[e1--]=p; 21 } 22 else if(strcmp(a,"RIN")==0) 23 { 24 scanf("%d",&p); 25 num[++e2]=p; 26 } 27 else if(strcmp(a,"LOUT")==0) 28 { 29 if(e1>=e2)//说明没有数了 30 { 31 qwe[flog++]=i;//出现不满足的情况 32 e1=10050;//恢复原值 33 e2=10050;//恢复原值 34 } 35 else 36 { 37 e1++; 38 } 39 } 40 else 41 { 42 if(strcmp(a,"ROUT")==0) 43 { 44 if(e1>=e2) 45 { 46 qwe[flog++]=i; 47 e1=10050; 48 e2=10050; 49 } 50 else 51 { 52 e2--; 53 } 54 } 55 } 56 } 57 if(e1<e2) 58 { 59 for(int i=e1+1; i<=e2; i++) 60 { 61 if(i==e2) 62 printf("%d ",num[i]); 63 else 64 { 65 printf("%d ",num[i]); 66 } 67 } 68 } 69 for(int i=0; i<flog; i++) 70 { 71 printf("%d ERROR ",qwe[i]); 72 } 73 return 0; 74 }