手速
1000 ms | 内存限制: 65535
1
被学长虐了之后,wyl 认识到了手速的重要性,yy了一道。
初始化序列为空
给 n 个操作:
0 : 从头部往里放
1 : 从尾部往里放
2 : 从头部删除
3 : 从尾部删除
4: 改变功能,原来是从头部放的从尾部放,从尾部放的从头部放,删除也是如此
注:如果序列为空,请忽略2,3功能
Line1:T组数据(T<=10)
Line2:一个整数n(n<=200)
Line3:如果是0||1 操作,则后面跟一个m(int范围内),表示要放的数。
输出
如果当前序列为空,输出-1;
否则输出当前序列,用空格隔开
样例输入
2 3 0 1 0 2 1 3 0
样例输出
2 1 3 -1
此题用到数据结构:双端队列---deque<int >v;
常用结构 push_front();从头压入
push_back();从尾压入
pop_front();从头删除
pop_back();从尾删除
详细用法:http://qianmacao.blog.163.com/blog/static/20339718020123605656363/
参考代码:
/****************
Times:0ms;
NYOJ 1128
***************/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<string>
using namespace std;
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a))
int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
int main()
{
deque<int >v;
int n,m,i,j,a,b,c,d;
cin>>n;
while(n--)
{
while(!v.empty())
v.pop_front();
int flag=0;
cin>>m;
for(i=0; i<m; i++)
{
cin>>a;
if(a==4)
{
flag=flag^1;
continue;
}
if(flag==0)
{
if(a==0||a==1)
{
cin>>b;
if(a==0)
v.push_front(b);
else v.push_back(b);
}
else
{
if(!v.empty())
{
if(a==2)
v.pop_front();
else v.pop_back();
}
}
}
else
{
if(a==0||a==1)
{
cin>>b;
if(a==1)
v.push_front(b);
else v.push_back(b);
}
else
{
if(!v.empty())
{
if(a==3)
v.pop_front();
else
v.pop_back();
}
}
}
}
if(!v.empty())
{
while(!v.empty())
{
printf("%d ",v.front());
v.pop_front();
}
}
else
printf("-1");
puts("");
}
return 0;
}