aeitCS 有一台打字机。
初始时打字机中只有一行字符串 \a/\e/\i/\t/\C/\S/ ,其序号为 1。
它支持若干种操作。指令格式形如一/两个确定的数字,再加上若干个变量,变量可能是数字、字符、字符串。
下面是详细描述:
一、插入操作:
插入一个序号为目前打字机内字符串数目 +1 的字符串。
1 1 表示插入一个空字符串。1 2 s 表示插入一个字符串 s 。1 3 c n 表示插入字符 c 复制 n 次构成的字符串。
1 4 s n 表示插入字符串 s 从第 n 位开始一直到结尾的部分。
1 5 s l r 表示插入字符串 s 从第 l 位到第 r 位的部分。1 6 i 表示插入序号为 i 的字符串。1 7 s 表示插入一个内含空格的字符串 s 。二、删除操作:
删去指定的一些字符串,之后所有未被删去的字符串的序号会减去被删去且原先序号比它小的字符串的数目。
2 1 i 表示将序号为 i 的字符串删除。2 2 s 表示将所有为 s 的字符串删除。2 3 s 表示将所有字典序比 s 小的字符串删除。2 4 s 表示将所有字典序比 s 大的字符串删除。三、交换操作:
3 i j 表示交换序号为 i,j 的字符串。四、修改操作:
4 1 i c 表示在序号为 i 的字符串末尾插入字符 c 。4 2 i p c 表示在序号为 i 的字符串的第 p 位插入字符 c 。4 3 i 表示删去序号为 i 的字符串末尾的字符。4 4 i p 表示删去序号为 i 的字符串第 p 位的字符。4 5 i s 表示在序号为 i 的字符串末尾插入字符串 s 。
4 6 i p s 表示在序号为 i 的字符串的第 p 位插入字符串 s 。
4 7 i l r 表示删去序号为 i 的字符串第 l 位到第 r 位的部分。4 8 i l r s 表示将序号为 i 的字符串第 l 位到第 r 位的部分替换成字符串 s 。五、查询操作:
5 1 表示查询当前打字机中的字符串数目。
5 2 i 表示查询序号为 i 的字符串。
5 3 i s 表示查询序号为 i 的字符串中,字符串 s 的出现次数以及每次出现的结束位置。输入
第一行输入一个正整数 q (1 \leq q \leq 500),表示指令个数。
随后 q 行每行一句指令,格式详见题面描述或样例。
数据保证任何时刻最长的字符串长度不超过 500。
数据保证除指令 1 7 s 之外的字符/字符串不含空格。
数据保证所有字符/字符串仅涉及数字、大小写字母、下划线、空格、左右斜杠五种字符。
数据保证不会对不存在的字符串进行操作,不会删除不存在的字符。
注意操作 4 2 i p c 、4 4 i p 、4 6 i p s 中的 p 可能为序号为 i 的字符串的长度 +1,代表直接插入在其末尾。
输出
对于每个查询指令都有一行输出。
若查询指令形如 5 1 ,则输出一行一个非负整数表示当前打字机中的字符串数目。
若查询指令形如 5 2 i ,则输出一行一个字符串表示序号为 i 的字符串(该串可能是空串)。
若查询指令形如 5 3 i s ,则输出一行若干个非负整数:
其中第一个非负整数 m 代表序号为 i 的字符串中,字符串 s 的出现次数。
随后 m 个正整数依次是字符串 s 在序号为 i 的字符串中从小到大的出现位置。
m+1 个非负整数中间均用一个空格隔开。
样例
| 标准输入 复制文本 |
44 1 1 1 2 CReatiQ 5 2 3 5 2 2 1 3 k 7 5 2 4 1 4 Kan_kiz 4 5 2 5 1 5 Lacrymabre 3 8 5 2 6 1 6 1 5 2 7 1 7 Are u right? 5 2 8 2 1 4 5 2 7 2 2 \a/\e/\i/\t/\C/\S/ 5 2 5 2 3 \ 5 2 2 2 4 d 5 2 2 3 1 2 5 2 2 4 1 2 _ 5 2 2 4 2 1 1 a 5 2 1 4 3 1 5 2 1 4 4 2 1 5 2 2 4 5 2 Kan 5 2 2 4 6 2 8 _kiz 5 2 2 4 7 1 2 5 5 2 1 4 8 2 1 3 CReatiQ 5 2 2 4 1 1 a 5 3 1 aa 1 1 5 1 |
| 标准输出 复制文本 |
CReatiQ kkkkkkk _kiz crymab \a/\e/\i/\t/\C/\S/ Are u right? Are u right? Are u right? crymab crymab _kiz _kiz_ acrymab acryma kiz_ kiz_Kan kiz_Kan_kiz aa CReatiQ_Kan_kiz 2 2 3 3 |
提示
| 操作(前两位为操作类型) | 操作解释 | 输出状态 | 打字机状态 |
|---|---|---|---|
| - 初始情况 - | 1 号字符串:\a/\e/\i/\t/\C/\S/ | \a/\e/\i/\t/\C/\S/ | |
| \text{(1 1)} | 插入 2 号空字符串: | \a/\e/\i/\t/\C/\S/ (空串) | |
| \text{(1 2 }CReatiQ\text{)} | 插入 3 号字符串: CReatiQ | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ | |
| \text{(5 2 3)} | 查询 3 号字符串 | CReatiQ | |
| \text{(5 2 2)} | 查询 2 号字符串 | (空串) | |
| \text{(1 3 }k\text{ 7)} | 插入 4 号字符串( k 重复 7 次 ): kkkkkkk | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ kkkkkkk | |
| \text{(5 2 4)} | 查询 4 号字符串 | kkkkkkk | |
| \text{(1 4 }Kan_kiz\text{ 4)} | 插入 5 号字符串( Kan_kiz 从第 4 位开始 ): _kiz | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ kkkkkkk _kiz | |
| \text{(5 2 5)} | 查询 5 号字符串 | _kiz | |
| \text{(1 5 }Lacrymabre\text{ 3 8)} | 插入 6 号字符串( Lacrymabre 第 3\sim 8 位 ): crymab | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ kkkkkkk _kiz crymab | |
| \text{(5 2 6)} | 查询 6 号字符串 | crymab | |
| \text{(1 6 1)} | 插入 7 号字符串( 取 1 号字符串 ):\a/\e/\i/\t/\C/\S/ | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ kkkkkkk _kiz crymab \a/\e/\i/\t/\C/\S/ | |
| \text{(5 2 7)} | 查询 7 号字符串 | \a/\e/\i/\t/\C/\S/ | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ kkkkkkk _kiz crymab \a/\e/\i/\t/\C/\S/ |
| \text{(1 7 }Are u right?\text{)} | 插入 8 号字符串( 这个字符串中含有空格 ):Are u right? | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ kkkkkkk _kiz crymab \a/\e/\i/\t/\C/\S/ Are u right? | |
| \text{(5 2 8)} | 查询 8 号字符串 | Are u right? | |
| \text{(2 1 4)} | 将 4 号字符串删除( 5 ~ 8 号字符串编号变为 4 ~ 7 ) | \a/\e/\i/\t/\C/\S/ (空串) CReatiQ _kiz crymab \a/\e/\i/\t/\C/\S/ Are u right? | |
| \text{(5 2 7)} | 查询 7 号字符串 | Are u right? | |
| \text{(2 2 }\a/\e/\i/\t/\C/\S/\text{)} | 删除所有字符串 \a/\e/\i/\t/\C/\S/ (这里删去了 1 号字符串和 6 号字符串,2 ~ 5,7 号字符串编号变为 1 ~ 4,5,后续操作不再对编号变换作解释 ) | (空串) CReatiQ _kiz crymab Are u right? | |
| \text{(5 2 5)} | 查询 5 号字符串 | Are u right? | |
| \text{(2 3 }\\text{)} | 删除字典序比 \ 小的字符串 | _kiz crymab | |
| \text{(5 2 2)} | 查询 2 号字符串 | crymab | |
| \text{(2 4 }d\text{)} | 删除字典序比 d 大的字符串 | _kiz crymab | |
| \text{(5 2 2)} | 查询 2 号字符串 | crymab | |
| \text{(3 1 2)} | 交换 1 号和 2 号字符串 | crymab _kiz | |
| \text{(5 2 2)} | 查询 2 号字符串 | _kiz | |
| \text{(4 1 2 }_\text{)} | 在 2 号字符串结尾加上 _ | crymab _kiz_ | |
| \text{(5 2 2)} | 查询 2 号字符串 | _kiz_ | |
| \text{(4 2 1 1 }a\text{)} | 在 1 号字符串的第 1 位插入 a | acrymab _kiz_ | |
| \text{(5 2 1)} | 查询 1 号字符串 | acrymab | |
| \text{(4 3 1)} | 删除 1 号字符串末尾的字符 | acryma _kiz_ | |
| \text{(5 2 1)} | 查询 1 号字符串 | acryma | |
| \text{(4 4 2 1)} | 删除 2 号字符串的第 1 个字符 | acryma kiz_ | |
| \text{(5 2 2)} | 查询 2 号字符串 | kiz_ | |
| \text{(4 5 2 }Kan\text{)} | 在 2 号字符串末尾插入字符串 Kan | acryma kiz_Kan | |
| \text{(5 2 2)} | 查询 2 号字符串 | kiz_Kan | |
| \text{(4 6 2 8 }_kiz\text{)} | 在 2 号字符串的第 8 位插入字符串 _kiz | acryma kiz_Kan_kiz | |
| \text{(5 2 2)} | 查询 2 号字符串 | kiz_Kan_kiz | |
| \text{(4 7 1 2 5)} | 删除 1 号字符串的第 2 \sim 5 位 | aa kiz_Kan_kiz | |
| \text{(5 2 1)} | 查询 1 号字符串 | aa | |
| \text{(4 8 2 1 3 }CReatiQ\text{)} | 将 2 号字符串的第 1 \sim 3 位替换成 CReatiQ | aa CReatiQ_Kan_kiz | |
| \text{(5 2 2)} | 查询 2 号字符串 | CReatiQ_Kan_kiz | |
| \text{(4 1 1 }a\text{)} | 在 1 号字符串末尾插入字符 a | aaa CReatiQ_Kan_kiz | |
| \text{(5 3 1 }aa\text{)} | 查询 1 号字符串中,aa 出现的次数以及出现的结束位置 | 2 2 3 | |
| \text{(1 1)} | 插入 3 号空字符串: | aaa CReatiQ_Kan_kiz (空串) | |
| \text{(5 1)} | 查询字符串数量 | 3 |