結果

問題 No.2740 Old Maid
ユーザー 名称未設定名称未設定
提出日時 2024-04-20 16:01:13
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
TLE  
実行時間 -
コード長 2,540 bytes
コンパイル時間 1,628 ms
コンパイル使用メモリ 170,596 KB
実行使用メモリ 23,240 KB
最終ジャッジ日時 2024-10-12 11:44:10
合計ジャッジ時間 9,225 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 TLE -
testcase_01 -- -
testcase_02 -- -
testcase_03 -- -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
testcase_31 -- -
testcase_32 -- -
testcase_33 -- -
testcase_34 -- -
testcase_35 -- -
testcase_36 -- -
testcase_37 -- -
testcase_38 -- -
testcase_39 -- -
testcase_40 -- -
testcase_41 -- -
testcase_42 -- -
testcase_43 -- -
testcase_44 -- -
testcase_45 -- -
testcase_46 -- -
testcase_47 -- -
testcase_48 -- -
testcase_49 -- -
testcase_50 -- -
testcase_51 -- -
testcase_52 -- -
testcase_53 -- -
testcase_54 -- -
testcase_55 -- -
testcase_56 -- -
testcase_57 -- -
testcase_58 -- -
testcase_59 -- -
testcase_60 -- -
testcase_61 -- -
testcase_62 -- -
testcase_63 -- -
testcase_64 -- -
権限があれば一括ダウンロードができます

ソースコード

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){
        #ifdef DEBUG
            cout << "removing: " << nodeToRemove->data << endl;
        #endif
        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);
    }

    #ifdef DEBUG
        p.print();
    #endif

    while(p.size > 0){
        linkedList::node* min = getAvailableMin(&p);
        #ifdef DEBUG
            cout << "now list is: ";
            p.print();
            cout << "min: " << min->data << endl;
        #endif
        q.push_back(min->data);
        q.push_back(min->next->data);
        p.remove(min->next);
        p.remove(min);
    }

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

    return 0;
}
0