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