1 条题解

  • 2
    @ 2024-7-25 14:53:26
    #include<iostream>
    using namespace std;
    const int N = 100010;
    int idx = 2, head, tail = 1, e[N], l[N], r[N],n, j;
    void init() //初始化头尾指针
    {
    	r[head] = tail;
    	l[tail] = head;
    }
    void add1(int x) //向左端点插入
    {
    	e[idx] = x;
    	r[idx] = head;
    	l[head] = idx;
    	head = idx;
    }
    void add2(int x) //向右端点插入
    {
    	e[idx] = x;
    	r[tail] = idx;
    	l[idx] = tail;
    	tail = idx;
    }
    void del1(int j) //从头指针开始删除
    {
    	while (j)
    	{
    		if (head >= 2) //由于初始化的头尾指针不属于队列,需要直接跳过
    			j--;
    		head = r[head];
    	}
    }
    void del2(int j) //从尾指针开始删除
    {
    	while (j)
    	{
    		if (tail >= 2)
    			j--;
    		tail = l[tail];
    	}
    }
    int main()
    {
    	init();
    	char k, ch;
    	int v, i=0;
    	cin >> n;
    	while (n--)
    	{
    		cin >> k;
    		if (k == 'A')
    		{
    			i++;
    			cin >> ch;
    			if (ch == 'L')
    			{
    				add1(i);
    			}
    			else if (ch == 'R')
    			{
    				add2(i);
    			}
    			idx++;
    			
    		}
    		else if (k == 'D')
    		{
    			cin >> ch >> j;
    			if (ch == 'L')
    			{
    				del1(j);
    			}
    			else if (ch == 'R')
    			{
    				del2(j);
    			}
    		}
    		
    	}
    	while (1)
    	{
    		if (head == tail)
    		{
    			cout << e[head] << ' ';
    			break;
    		}
    		if(e[head]!=0)
    		{
    			cout << e[head] <<endl;
    		}
    		head = r[head];
    	}
    	return 0;
    }
    

    信息

    ID
    2273
    时间
    1000ms
    内存
    125MiB
    难度
    9
    标签
    递交数
    10
    已通过
    9
    上传者