题号:NC53266
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
复制粘贴是文本编辑器最重要的功能之一,JOI社正在开发一个可以快速处理复制粘贴操作的文本编辑器。作为JOI社的一名优秀的程序员,你的任务是测试复制粘贴功能的核心代码。由于JOI社危在旦夕,你需要确保这段核心代码准确高速。
具体的操作如下。初始时文件内容为一个字符串S,随后进行N次复制粘贴操作。第i次操作,先复制字符串中位置为
与
之间的子串,并将这部分插入到字符串的
位置。这里,位置x表示从字符串开头向后数x个字符与后一个字符之间的位置(位置0表示字符串的开头)。例如,字符串copypaste的位置6为字符a与s之间的位置,位置9表示字符e的后面,也就是说,它代表了字符串的结尾。但是,如果操作后字符串长度超过M,就会从字符串结尾删除字符,直到字符串长度为M。
给定文本S和N次操作,你的任务是求出经过这N次操作后文本S的前K个字符。
输入描述:
第一行两个正整数K,M,分别表示最后要输出文本S的前K个字符,文本S长度的上限为M。
第二行一个字符串S,表示初始文本。
第三行一个正整数N,表示操作次数。
接下来N行,每行三个正整数
,表示将文本S中位置为
到
的部分复制插入到
位置。
输出描述:
一行一个长度为K的字符串,表示最终答案。
示例1
输入
复制
2 18
copypaste
4
3 6 8
1 5 2
4 12 1
17 18 0
说明
初始文本为copypaste。
第一次操作,将位置3到位置6之间的文本ypa复制到位置8,文本变为copypastypae。
第二次操作,将位置1到位置5之间的文本opyp复制到位置8,文本变为coopyppypastypae。
第三次操作,将位置4到位置12之间的文本yppypast复制到位置1,文本变为cyppypastoopyppypastypae。但是文本长度上限M=18,从右向左删除文本中字符至文本长度为18,文本变为cyppypastoopyppypa。
第四次操作,将位置17到位置18之间的文本a复制到位置0,文本变为acyppypastoopyppypa。但是文本长度上限M=18,从右向左删除文本中字符至文本长度为18,文本变为acyppypastoopyppyp。
最终,输出文本acyppypastoopyppyp的前K=2个字符,即为ac。
示例2
输入
复制
6 100
jjooii
3
5 6 2
4 6 1
1 2 3
备注:
对于全部数据,

。保证S由小写英文字母构成。设

为第i次操作之后文本S的长度,保证

。
CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2994