1 条题解
-
2
#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; }
- 1
信息
- ID
- 2273
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 9
- 标签
- 递交数
- 10
- 已通过
- 9
- 上传者