NYOJ 1128 手速(雙端佇列)
阿新 • • 發佈:2018-11-17
手速
時間限制: 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; } } }