1. 程式人生 > >NYOJ 1128 手速(雙端佇列)

NYOJ 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;
    }
  }
}