[規格/C+]10866号デッキ

23902 ワード

10866問題リンク

質問する


整数を格納するDequeを実行し、入力としてのコマンドを処理するプログラムを作成します.
命令は全部で8条ある.
  • push frontX:整数Xをインデックスの前に配置します.
  • push backX:整数Xをインデックスの後ろに配置します.
  • pop front:インデックスの一番前の数字を削除し、その数字を出力します.インデックスに整数がない場合は、-1が出力されます.
  • pop back:dexの最後の数字を出力します.インデックスに整数がない場合は、-1が出力されます.
  • size:インデックス内の整数の個数を出力します.
  • 空:インデックスが空の場合、1または0が出力されます.
  • front:インデックスの一番前の整数を出力します.インデックスに整数がない場合は、-1が出力されます.
  • back:インデックスの一番後ろの整数を出力します.インデックスに整数がない場合は、-1が出力されます.
  • 入力


    1行目に与えられるコマンド数N(1≦N≦10000).2行目からN行目までそれぞれ1つのコマンドがあります.与えられた整数は1以上であり、100000以下である.問題にない命令はない.

    しゅつりょく


    出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.

    に答える


    DEQは両端とも挿入と削除が可能なキューで、スタックとキューの特徴を同時に処理して削除することができます.
    C++はSTLを用いてdeque機能を提供し,配列で実現することもできる.

    ソースコード


    ①STLで解く
    #include <iostream>
    #include <deque>
    
    using namespace std;
    
    int deque_stl() {
    
        deque<int> deque_int;
    
        int n;
        cin >> n;
        
        string command;
        int command_num;
        
        for(int i=0;i<n;i++) {
            cin >> command;
            
            if (command == "push_front") {
                cin >> command_num;
                deque_int.push_front(command_num);
            } else if (command == "push_back") {
                cin >> command_num;
                deque_int.push_back(command_num);
            } else if (command == "size") {
                cout << deque_int.size() << endl;
            } else if (command == "empty") {
                cout << deque_int.empty() << endl;
            } else if (deque_int.empty()) {
                cout << -1 << endl;
            } else if (command == "pop_front") {
                cout << deque_int.front() << endl;
                deque_int.pop_front();
            } else if (command == "pop_back") {
                cout << deque_int.back() << endl;
                deque_int.pop_back();
            } else if (command == "front") {
                cout << deque_int.front() << endl;
            } else if (command == "back") {
                cout << deque_int.back() << endl;
            }
        }
        
        return 0;
    }
    ②平屋
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    const int MX = 1000000;
    int deque_arr[2 * MX + 1];
    int head = MX, tail = MX;
     
    int empty(int dat[]) {
        if (head == tail) return 1; // 덱이 비어 있는 경우
        else return 0; // 덱이 비어 있지 않은 경우
    }
     
    void push_front(int deque_arr[], int data) {
        deque_arr[--head] = data;
    }
     
    void push_back(int deque_arr[], int data) {
        deque_arr[tail++] = data;
    }
     
    int pop_front(int deque_arr[]) {
        if (empty(deque_arr)) return -1;
        return deque_arr[head++];
    }
     
    int pop_back(int deque_arr[]) {
        if (empty(deque_arr)) return -1;
        return deque_arr[--tail];
    }
     
    int size(int deque_arr[]) {
        return tail - head;
    }
     
    int front(int deque_arr[]) {
        if (empty(deque_arr)) return - 1;
        return deque_arr[head];
    }
     
    int back(int deque_arr[]) {
        if (empty(deque_arr)) return -1;
        return deque_arr[tail - 1];
    }
     
    int main() {
        int n;
        cin >> n;
        
        string command;
        int command_num;
     
        for (int i = 0; i < n; i++) {
            cin >> command;
     
            if (command == "push_front") {
                cin >> command_num;
                push_front(deque_arr, command_num);
            }
            else if (command == "push_back") {
                cin >> command_num;
                push_back(deque_arr, command_num);
            }
            else if (command == "pop_front") {
                cout << pop_front(deque_arr) << endl;
            }
            else if (command == "pop_back") {
                cout << pop_back(deque_arr) << endl;
            }
            else if (command == "size") {
                cout << size(deque_arr) << endl;
            }
            else if (command == "empty") {
                cout << empty(deque_arr) << endl;
            }
            else if (command == "front") {
                cout << front(deque_arr) << endl;
            }
            else if (command == "back") {
                cout << back(deque_arr) << endl;
            }
        }
        
        return 0;
    }
    

    正解