luogu#P5599. 【XR-4】文本编辑器
【XR-4】文本编辑器
题目背景
赛时提醒:本题输入数据是 Windows 格式,而非 Linux 格式,所以在每一行末尾的 \n
之前有一个多余的 \r
字符。请使用 scanf
或 cin
读入数据,而非 getline
,因为后者会多读入一个 \r
。
题目描述
小 X 在制作一个文本编辑器,现在需要实现最基本的“查找和替换”功能。
在文本编辑器中,文件是以一个长度为 的字符串 的形式存储的。
同时,用户拥有一个包含 个单词的字典,每个单词都是一个字符串,称第 个单词为 。
接下来定义查找和替换功能:
-
查找功能:有两个参数 ,表示询问对于字典中的每个单词 , 中 的出现次数之和。
即询问 $\displaystyle \sum_{i=1}^{m} \mathrm{occur}(s_i, a[l : r])$,其中 表示字符串 在字符串 中的出现次数。 -
替换功能:有三个参数 ,其中 是一个字符串,表示将 替换为 不断重复的结果。
即如果把 替换为 不断重复的结果,则原字符串变为 。
用户给出了 个操作,每个操作是查找或替换之一,你需要正确回答每个查找操作的答案。
输入格式
第一行三个整数 ,依次表示文件 的长度,字典中的单词数,询问的个数。
第二行一个长度为 的字符串 ,表示初始文件。
接下来 行,第 行一个字符串,表示第 个单词 。
接下来 行,每行表示一个操作:
每行的第一个数 表示此次操作的类型;
若 ,则接下来两个整数 ,表示这是一次查找操作,参数为 ;
若 ,则接下来两个整数 和一个字符串 ,表示这是一次替换操作,参数为 。
输出格式
对于每个查找操作,一行一个整数,表示本次查找操作的答案。
6 2 5
BBABBA
BB
BAB
1 1 6
2 3 5 A
1 2 3
2 1 6 B
1 1 5
3
0
4
提示
本题采用捆绑测试。
- Subtask 1(7 points):,所有字符串长度 ,时限 。
- Subtask 2(7 points):,时限 。
- Subtask 3(13 points):,时限 。
- Subtask 4(17 points):没有替换操作,即 ,时限 。
- Subtask 5(18 points):,,,时限 。
- Subtask 6(13 points):,,,时限 。
- Subtask 7(25 points):无特殊限制,时限 。
对于 的数据:
对 的限制:,,。
对字符串长度的限制:,,。
所有字符串保证不为空串,且出现的字符属于集合 ,其中 $\mathbf{\Sigma} = [\texttt a, \texttt z] \cup [\texttt A, \texttt Z] \cup [\texttt 0, \texttt 9]$,即所有大小写英文字母以及数字,故 。
需要特别注意的是,与文件相比,单词的长度是非常小的。在解题时你可能需要利用这一点。
【一些定义】
对于一个长度为 的字符串 ,符号 ()表示 中从 到 的子串。即 中从第 个字符到第 个字符(包含端点)连续拼接在一起形成的字符串。
对于一个字符串 ,符号 表示它的长度。