您的位置:首页 > 其它

NYOJ 1128 手速(双端队列)

2017-11-25 20:35 246 查看
题目1128


手速

时间限制:1000 ms  |  内存限制:65535 KB
难度: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> d:双端队列。

push_front();往头部插元素

push_back();往尾部插元素

pop_front();删除头部元素

pop_back();删除尾部元素

#include<cstdio>
#include<iostream>
#include<deque>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
int n, a, b, push_f = 0, push_b = 1, pop_f = 2, pop_b = 3;
deque<int> d;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> a;
if(a == 4) {//改变功能
swap(push_f, push_b);
swap(pop_f, pop_b);
}
else if(a == push_f) { cin >> b; d.push_front(b); }
else if(a == push_b) { cin >> b; d.push_back(b); }
else if(a == pop_f && !d.empty()) d.pop_front();
else if(a == pop_b && !d.empty()) d.pop_back();
}
if(d.empty()) cout << "-1" << endl;
else {
for(int i = 0; i < d.size(); i++)
cout << d[i] << " ";
cout << endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: