Problem
【SHOI2016】生成魔咒
Description
魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示。例如可以将魔咒字符 , 拼凑起来形成一个魔咒串 。
一个魔咒串 的非空字串被称为魔咒串 的生成魔咒。例如 时,它的生成魔咒有 ,,,, 五种。 时,它的生成魔咒有 ,, 三种。
最初 为空串。共进行 次操作,每次操作是在 的结尾加入一个魔咒字符。每次操作后都需要求出,当前的魔咒串 共有多少种生成魔咒。
Input
第一行一个整数 。
第二行 个数,第 个数表示第 次操作加入的魔咒字符
,用来表示魔咒字符的数字 满足
Output
输出 行,每行一个数。第 行的数表示第 次操作后 的生成魔咒数量
Sample Input
1 | 7 |
Sample Output
1 | 1 |
Source
鸣谢Menci
上传
标签:后缀自动机
Solution
后缀自动机的模板题。
按题意增量构建后缀自动机,考虑每次新增的一位能构成多少新串,贡献计入答案。
对于每次新增的结点,若其在树上的父亲为,那么前面有若干条路走到从而得到的字符串与其走到得到的字符串相同。由于走到的字符串个数是,走到的字符串个数是。因此新增字符串个数是。维护即可。
Code
1 |
|