#P16880. [Spoj5153]Compressed String
[Spoj5153]Compressed String
题目描述
Chris 每天都要处理非常长的字符串。由于字符串可能长到无法直接存储,她会把字符串压缩成较短的表达式。
压缩操作如下:
- 在原字符串中找到一段连续重复出现的子串;
- 把这一段写成
[S]N的形式,其中S是重复的字符串,N表示重复次数; - 可以重复进行上述操作,因此方括号可以嵌套。
例如:
cabababd可以写成c[ab]3d;[a]2表示aa;[[ab]2c]2表示ababcababc。
注意,一个字符串的压缩形式并不唯一。例如 cabababd 也可以写成 c[ab]1ababd 或 ca[ba]2bd。
Chris 写了一个程序来自动完成压缩,但这个程序可能出错。现在给定 Chris 的标准压缩结果以及程序产生的压缩结果,请判断它们解压后是否表示同一个字符串。
如果不同,还需要输出它们第一个不同字符的位置。位置从 开始编号。
如果其中一个解压后的字符串是另一个字符串的严格前缀,那么第一个不同位置为较短字符串长度加 。
输入格式
第一行一个整数 ,表示测试用例数。
对于每组测试数据:
- 第一行是 Chris 的标准压缩字符串;
- 第二行是程序产生的压缩字符串。
压缩字符串只包含:
- 小写英文字母
a~z; - 方括号
[、]; - 数字
0~9。
每个右方括号 ] 后一定紧跟一个非负整数,表示方括号内字符串的重复次数。重复次数可以为 。
方括号可以嵌套。
每个压缩字符串的长度均不超过 。
题目中的数值可能很大,不能假设它们能够存入 32 位整数。
输出格式
对于第 组测试数据:
- 如果两个压缩字符串解压后完全相同,输出:
Case #k: YES
- 否则输出:
Case #k: NO p
其中 是两个解压字符串第一个不同字符的位置。
样例
输入
5
a[a]12
[[a]3]4a
[z]12
zzzzzzzzz
[a[ba]2b]12
[ab]36
[a]123123123[icpc]2
[[a]123]1001001inter
aismoreeasierthanc
gismuchharderthanj
输出
Case #1: YES
Case #2: NO 10
Case #3: YES
Case #4: NO 123123125
Case #5: NO 1
说明
对于样例 3:
[a[ba]2b]12
可以看成:
[ababab]12
又等价于:
[[ab]3]12
最终等价于:
[ab]36
数据范围
- ;
- 每个压缩字符串长度不超过 ;
- 解压后的字符串可能非常长,不能直接展开。