Skip to content

test

原始文件为 cpp 代码,本文是转换后的 Markdown 文件。

#include <bits/stdc++.h>

using namespace std;
const int MAXN = 100005;

class node
{
    public:
        int value;
        node* left;
        node* right;
        node(int v):value(v){}
};

node* node_arr[MAXN];

void init(int n)
{
    for(int i = 0; i <= n+1; ++i)
        node_arr[i] = new node{i};

    for(int i = 1; i <= n; ++i)
    {
        node_arr[i]->left = node_arr[i-1];
        node_arr[i]->right = node_arr[i+1];
    }
    node_arr[0]->left = nullptr;
    node_arr[0]->right = node_arr[1];
    node_arr[n + 1]->left = node_arr[n];
    node_arr[n + 1]->right = nullptr;
}

void destory(int n)
{
    for(int i = 0; i <= n+1; ++i)
    {
        delete node_arr[i];
        node_arr[i] = nullptr;
    }
}

void print(int n)
{
    node* cur_node = node_arr[0];
    while(cur_node->right != nullptr)
    {
        printf("%d ", cur_node->value);
        cur_node = cur_node->right;
    }
    printf("\n");
}

void choice_01(int X, int Y);
void choice_02(int X, int Y);
void choice_03(int X, int Y);
void choice_04(int n);

int main(void)
{
    freopen("in.txt", "r", stdin);
    for(int i = 0; i < MAXN; ++i) delete node_arr[i];

    int n, m; int count = 0;
    while(scanf("%d%d", &n, &m) != EOF)
    {
        init(n);
        for(int i = 0; i < m; ++i)
        {
            int choice; scanf("%d", &choice);
            if(choice == 4)
            {
                choice_04(n);
            }else
            {
                int X, Y; scanf("%d%d", &X, &Y);
                if(choice == 1) choice_01(X, Y);
                if(choice == 2) choice_02(X, Y);
                if(choice == 3) choice_03(X, Y);
            }
            print(n);
        }
        // print(n);
        destory(n);
    }
    return 0;
}

void choice_01(int X, int Y)
{
    node* x_node = node_arr[X];
    node* y_node = node_arr[Y];

    x_node->left->right = x_node->right;
    x_node->right->left = x_node->left;
    y_node->left->right = y_node->right;
    y_node->right->left = y_node->left;

    y_node->left = x_node;
    x_node->right = y_node;

}

void choice_02(int X, int Y)
{
    node* x_node = node_arr[X];
    node* y_node = node_arr[Y];

    x_node->left->right = x_node->right;
    x_node->right->left = x_node->left;
    y_node->left->right = y_node->right;
    y_node->right->left = y_node->left;

    y_node->right = x_node;
    x_node->left = y_node;
}

void choice_03(int X, int Y)
{
    node* x_node = node_arr[X];
    node* y_node = node_arr[Y];

    x_node->left->right = y_node;
    x_node->right->left = y_node;
    y_node->left->right = x_node;
    y_node->right->left = x_node;

    node* y_left = y_node->left;
    node* y_right = y_node->right;

    y_node->left = x_node->left;
    y_node->right = x_node->right;
    x_node->left = y_left;
    x_node->right = y_right;

}

void choice_04(int n)
{
    for(int i = 0; i <= n+1; ++i)
    {
        node* cur_node = node_arr[i];
        swap(cur_node->left, cur_node->right);
    }
}