题目链接
题目类型:后缀数组变形
题目来源:2016年多校Round4
题目分析
题目大意
给出一个字符ch以及一个字符串s,问s中有多少种含字符ch的连续子串。
解析
从蓝书(§3.4)中好好学习了一下后缀数组,讲的还是比较详细的,可惜似乎书上的代码有问题,不过从这节领悟一下精神还是不错的。
对于一个字符串来讲,共计有∑(len - sa[i] - height[i])
个子串,len - sa[i] - height[i]
表达的意义是:从sa[i]开始的后缀串,除去之前已经贡献的串,还能贡献的该后缀串的前缀串的个数。我们需要筛选出含有字符x的串,那么就要对后面减去的这堆玩意更新一下,因为起码要包含一个吧,所以要减去max(sa[i]+height[i], nxt[i])
。理解了上面这句话,这题就不难做了。
代码
1 |
|