题目系介样的:
KK正在埋头编辑论文,YY只是远远看见KK进行了?次操作,有退格键、删除键、左移、右移、键入字符,请输出编辑后的论文。论文里,?表示光标,有且只有一个光标,退格键(backspace)是删除光标之前的一个符号,删除键(delete)是删除光标之后的一个符号,左移(<-)是将光标移动到左边字符之前去,右移(->)是将光标移动到右边字符之前去。光标左侧没有字符的情况下,退格和左移是无效的。光标右侧没有字符的情况下,删除和右移是无效的。如果键入字符,则会在光标前插入新的字符。 \
第一行两个正整数 ? 和 ?。 ? 代表论文的初始长度。 ?
代表编辑操作次数。
第二行为一个长度为 ? 的字符串,其中仅有1个字符 ? ,其他字符均为大写字母 ?,?和? 。
接下来k行,每行是这几种字符串之一:backspace、delete、<-、->、A、B、C。
共一行,表示编辑后的字符串
#include <bits/stdc++.h>
using namespace std;
int n, k;
string str;
int now;
string op;
int sum = 0;
int main() {
cin >> n >> k;
cin >> str;
sum = n - 1;
for(int i = 0; i < n; ++i) {
if(str[i] == 'I') {
str.erase(i, 1);
--i;
now = i + 1;
}
}
// cout << now << endl;
while(k--) {
cin >> op;
if(op == "backspace") {
str.erase(now, 1);
--now;
--sum;
}
else if(op == "<-") {
--now;
}
else if(op == "->") {
++now;
}
else if(op == "delete") {
--sum;
str.erase(now + 1, 1);
--now;
}
else {
str.insert(now, op);
++sum;
}
for(int i = 0; i < sum; ++i) {
if(i == now + 1) {
cout << "I";
}
cout << str[i];
}
}
for(int i = 0; i < sum; ++i) {
if(i == now + 1) {
cout << "I";
}
cout << str[i];
}
return 0;
}