Baek Junアルゴリズム1406号:編集
9692 ワード
リンク
https://www.acmicpc.net/problem/1406
質問する
線を1本実現する簡単なエディタ.このエディタには英語の小文字しか記録できません.最大600,000文字を入力できます.
このエディタには、文の一番前(最初の文字の左側)、文の一番後ろ(最後の文字の右側)、または文の真ん中の任意の位置(連続する2文字の間)にカーソルを置く「カーソル」というものがあります.つまり、現在のエディタに長さLの文字列を入力すると、カーソルはL+1の位置に配置できます.
このエディタでは、次のコマンドがサポートされています.
削除すると、カーソルが左にスペースを移動しますが、実際にはカーソルの右側の文字は
カーソル左側に
エディタに文字列を入力し、その文字列の後、すべてのコマンドを実行し、エディタに入力した文字列を取得するプログラムを作成します.しかし、コマンドが実行される前に、カーソルは文の末尾にあると言われています.
入力
最初の行には、初期入力エディタの文字列が表示されます.この文字列の長さはNで、英語の小文字のみで、長さは100000を超えない.2行目には、入力する命令数を示す整数M(1≦M≦500000)が与えられる.3行目から、M行の間に入力するコマンドを順番に与えます.コマンドは、上記の4つのいずれかの形式でのみ与えられます.
しゅつりょく
最初の行ですべてのコマンドを実行した後、出力エディタに入力した文字列.
入力と出力の例
プールコード(C++)
#include <bits/stdc++.h>
#define X first
#define Y second
#define pb push_back
#define sz(a) int((a).size())
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
using ll = long long;
using ull = unsigned long long;
using dbl = double;
using ldb = long double;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using vi = vector<int>;
using wector = vector<vector<int>>;
int main(){
fastio;
string s; cin >> s;
int n; cin >> n;
list<char> L;
for(auto c : s) L.push_back(c);
auto cursor = L.end();
while(n--){
char a; cin >> a;
if(a == 'L'){
if(cursor != L.begin()) cursor--;
}
else if(a == 'D'){
if(cursor != L.end()) cursor++;
}
else if(a == 'B'){
if(cursor != L.begin()){
cursor--;
cursor = L.erase(cursor);
}
}
else if(a == 'P'){
char k; cin >> k;
L.insert(cursor,k);
}
}
for(auto c : L) cout << c; cout << "\n";
return 0;
}
Reference
この問題について(Baek Junアルゴリズム1406号:編集), 我々は、より多くの情報をここで見つけました https://velog.io/@inwooleeme/백준-알고리즘-1406번-에디터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol