列表

详情


NC20895. 神器大师泰兹瑞与威穆

描述

「只要我拉动绳线,你就得随之起舞。」          ——泰兹瑞


       泰兹瑞来到卡拉德许之后,由于他精湛的神器制造技术,可谓是过的如鱼得水。这次,他为自己打造了一个编辑器,称为威穆(Veim)。操作威穆时,有两种模式,具体操作如下。

Normal Mode
- 按下 i :进入 Insert Mode
- 按下 f :紧接着一个小写字母 char,若当前光标后(右)方有至少一个 char ,将光标移动到其所在位置,否则不移动。
- 按下 x :删除当前光标所在位的字符,后面的字符均会前移一格。
- 按下 h :将光标向左(前)移动一格,若无法移动就不移动。
- 按下 l :将光标向右(后)移动一格,若无法移动就不移动。
- 若按下了其他字符:无任何效果。

Insert Mode
- 按下非 e 小写字母 char :在光标当前位置前插入这个字母 char。
- 按下 e :退出 Insert Mode(进入 Normal Mode)。 

       (具体请见样例)
       现在泰兹瑞的威穆中已经写入了一个字符串 s 。接下去泰兹瑞进行了一波操作(按下了若干按键),他的按键序列为 t 。现给出 s 和 t ,求这波操作之后威穆内留下的字符串。

输入描述

两行,第一行字符串 s ,第二行字符串 t 。

输出描述

一行,威穆里最后留下的字符串。

示例1

输入:

applese
xfllhlia

输出:

pplaese

说明:

- 初始时,字符串为 \mathtt{\underline{a}pplese},威穆处于 Normal Mode 。下划线表示光标所在位置。
- 第一步操作为 x ,删除当前光标所在位的字符,并且光标后移一格。字符串变为 \mathtt{\underline{p}plese} 。威穆仍处于 Normal Mode。
- 下一步操作为 f ,之后跟有一个字符 `l` 。光标后存在字符 `l` ,故移动到该位置。字符串变为 \mathtt{pp\underline{l}ese} 。威穆仍处于 Normal Mode。
- 下一步操作为 l ,光标后移一格。字符串变为 \mathtt{ppl\underline{e}se} 。威穆仍处于 Normal Mode。
- 下一步操作为 h ,光标前移一格。字符串变为 \mathtt{pp\underline{l}ese} 。威穆仍处于 Normal Mode。
- 下一步操作为 l ,光标后移一格。字符串变为 \mathtt{ppl\underline{e}se} 。威穆仍处于 Normal Mode。
- 下一步操作为 i ,威穆进入 Insert Mode。字符串仍为 \mathtt{ppl\underline{e}se}
- 下一步操作为 a ,而非 e ,故插入字符 a 。字符串变为 \mathtt{ppla\underline{e}se}

示例2

输入:

pppp
iaefpfpia

输出:

appapp

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 224ms, 内存消耗: 992K, 提交时间: 2018-11-19 07:54:57

#include<bits/stdc++.h>
using namespace std;
int m,p;
string s,t;
int main(){
	cin>>s>>t;
	for (int i=0;i<t.length();i++){
		if (m==0){
			if (t[i]=='i')m=1;
			if (t[i]=='h')if (p!=0)p--;
			if (t[i]=='l')if (p!=s.length()-1)p++;
			if (t[i]=='x')s.erase(p,1);
			if (t[i]=='f'){
				i++;
				for (int j=p+1;j<s.length();j++) if (s[j]==t[i]){p=j;break;}
			}
		}else{
			if (t[i]=='e')m=0;
			else{s.insert(p,1,t[i]);p++;}
		}
	}
	cout<<s<<endl;
	return 0;
}

上一题