时空限制
CPU占用时长: 1秒 内存使用限制: 128MB
问题描述
小明没有开屏幕就输入一个字符串,他的电脑键盘出现了问题会不定时的自动录入 “home”“end” 两个键,我们知道如果录入home则将光标定位到行首,如果录入end则是将光标定位到行末。
现在告诉你小明输入的字符串以及自动出现的“home”、“end”键,让你输出最后屏幕上显示的文本。
输入格式
输入包含多组数据。每组数据占一行,包含不超过100000个字母、下划线、字符“[”或 者“]”。
其中字符“[”表示Home键,“]”表示End键。输入文件不超过5MB。
输出格式
若干行,每行对应输入的一行文本
输入输出样例
样例1
输入样例
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University
输出样例
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University
参考代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct node {
char val;
int pre, nxt;
} a[N];
int tot, head, tail;
void init() {
tot = 2;
head = 1; tail = 2;
a[head].nxt = 2;
a[tail].pre = 1;
}
int insert(int p, char val) {
int q = ++tot;
a[q].val = val;
a[q].pre = p;
a[q].nxt = a[p].nxt;
a[p].nxt = q;
a[a[q].nxt].pre = q;
return q;
}
int main() {
string s;
while (cin >> s) {
init();
int p = head;
for (int i = 0; i < (int) s.size(); i++) {
if (s[i] == '[') p = head;
else if (s[i] == ']') p = a[tail].pre;
else p = insert(p, s[i]);
}
p = a[head].nxt;
while (p != tail) {
cout << a[p].val;
p = a[p].nxt;
}
cout << endl;
}
return 0;
}