結果

問題 No.2738 CPC To F
ユーザー 名称未設定名称未設定
提出日時 2024-04-20 15:49:42
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
RE  
実行時間 -
コード長 2,244 bytes
コンパイル時間 1,904 ms
コンパイル使用メモリ 165,160 KB
実行使用メモリ 18,944 KB
最終ジャッジ日時 2024-04-20 15:49:48
合計ジャッジ時間 5,844 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 RE -
testcase_01 RE -
testcase_02 RE -
testcase_03 RE -
testcase_04 RE -
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 RE -
testcase_09 RE -
testcase_10 RE -
testcase_11 RE -
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
testcase_20 RE -
testcase_21 RE -
testcase_22 RE -
testcase_23 RE -
権限があれば一括ダウンロードができます

ソースコード

diff #

#define DEBUG

#include <bits/stdc++.h>

using namespace std;

struct linkedList{
    struct node{
        int data;
        node* next;
        node* prev;
    };

    node* head;
    node* tail;
    int size;

    public:
    linkedList(){
        head = NULL;
        tail = NULL;
        size = 0;
    }

    void insert(int data){
        node* newNode = new node;
        newNode->data = data;
        newNode->next = NULL;
        newNode->prev = NULL;

        if(head == NULL){
            head = newNode;
            tail = newNode;
        }else{
            tail->next = newNode;
            newNode->prev = tail;
            tail = newNode;
        }
        size += 1;
    }

    void remove(node* nodeToRemove){
        if(nodeToRemove == NULL){
            return;
        }

        if(nodeToRemove == head){
            head = head->next;
            if(head != NULL){
                head->prev = NULL;
            }
        }else if(nodeToRemove == tail){
            tail = tail->prev;
            if(tail != NULL){
                tail->next = NULL;
            }
        }else{
            nodeToRemove->prev->next = nodeToRemove->next;
            nodeToRemove->next->prev = nodeToRemove->prev;
        }

        delete nodeToRemove;
        size -= 1;
    }

    void print(){
        node* current = head;
        while(current != NULL){
            cout << current->data << " ";
            current = current->next;
        }
        cout << endl;
    }
};

linkedList::node* getAvailableMin(linkedList* p){
    linkedList::node* current = p->head;
    linkedList::node* min = current;

    while(current != p->tail){
        if(current->data < min->data){
            min = current;
        }
        current = current->next;
    }

    return min;
}

int main(){
    int N;
    cin >> N;
    linkedList p;
    vector<int> q;

    for(int i = 0; i < N; i++){
        int x;
        cin >> x;
        p.insert(x);
    }

    while(p.size > 0){
        linkedList::node* min = getAvailableMin(&p);
        q.push_back(min->data);
        q.push_back(min->next->data);
        p.remove(min);
        p.remove(min->next);
    }

    for(int i = 0; i < q.size(); i++){
        cout << q[i] << " ";
    }

    return 0;
}
0