Loading

【题解】CF1483F Exam

建 acam,然后考虑某个长串能统计多少短串。

子串可以被表述为"某个前缀的后缀",枚举长串每个前缀对应的节点,跳 fail 就可以得到其所有子串。

如果两个子串被同一个前缀跳到,那么后被跳到的一定不合法,只有第一个被跳到的才有可能成为答案,定义这样的短串为"待确定串"。同时注意到如果有两个"待确定串"存在包含关系,那么被包含的那个"待确定串"也一定不合法。

事实上,满足 "出现次数 = 不被包含的待确定串个数" 的"待确定串"一定合法,如果不满足的话就一定不合法,这两个都很好求。由于出现次数需要用到树状数组一类数据结构,故复杂度为 \(O(|S|\log |S|)\)

posted @ 2021-08-31 16:50  Qiuly  阅读(53)  评论(0编辑  收藏  举报