HAOI 2016 找相同字符
问题描述
给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。
输入格式
两行,两个字符串 $s_1, s_2$,长度分别为 $n_1, n_2$。
字符串中只有小写字母。
输出格式
输出一个整数表示答案
样例输入
aabb
bbaa
样例输出
10
提示
1≤n1,n2≤200000
中间加一个分隔符,把两个串拼接起来。对于这个大串建立后缀自动机。
对于两个原串共有的子串,对答案的贡献为“在s1中出现的次数$\times$在s2中出现的次数”,这显然可以用后缀自动机维护。对于后缀自动机上的节点$p$,其代表的字符串有$max[p]-max[par[p]]$个。
下面的代码给出了一种较方便的实现方式。
1 |
|