题解:由于本题考的是双向队列,所以应该采用从中间向两侧建立数组存数据的方法。其中"LOUT""ROUT"的处理方法非常的巧妙。
易错:1.由于本人个人习惯用a[]去存储字符串,导致用了一个int a[]一个char a[],所以建议大家若果是字符串的话尽量去用 char s[].
2.本题所给的样例中最后是只剩了一个数据,但是其他测试数据,未必如此,所以要注意输出的形式。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int x,l,r,t,i;
char s[20002];
int d[20002],a[20002];
l=10000;r=l+1;t=0;
for(i=1;i<=n;i++)
{
scanf("%s",s);
if(strcmp(s,"LIN")==0)
{
scanf("%d",&x);
a[l--]=x;
}
if(strcmp(s,"RIN")==0)
{
scanf("%d",&x);
a[r++]=x;
}
if(strcmp(s,"LOUT")==0)
{
l++;
if(l==r)
{
d[++t]=i;
l--;
}
}
if(strcmp(s,"ROUT")==0)
{
r--;
if(l==r)
{
d[++t]=i;
r++;
}
}
}
for(i=l+1;i<r-1;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[r-1]);
for(i=1;i<=t;i++)
{
printf("%d ERROR\n",d[i]);
}
return 0;
}