KMP
「POI2006」Periods of Words-KMP
· ✏️ 578 words · ☕ 2 mins read

一个串是有限个小写字符的序列,特别的,一个空序列也可以是一个串. 一个串 P 是串 A 的前缀, 当且仅当存在串 B , 使得 A=PB. 如果 PA 并且 P 不是一个空串,那么我们说 PA 的一个 proper 前缀. 定义 QA 的周期, 当且仅当 QA 的一个 proper 前缀并且 AQQ 的前缀(不一定要是 proper 前缀).

比如串 ababababab 都是串 abababa 的周期. 串 A 的最大周期就是它最长的一个周期或者是一个空串(当 A 没有周期的时候), 比如说, ababab 的最大周期是 abab . 串 abc 的最大周期是空串. 给出一个串,求出它所有前缀的最大周期长度之和.


「HNOI2008」GT考试-KMP+dp+矩阵快速幂
· ✏️ 547 words · ☕ 2 mins read

阿申准备报名参加 GT 考试,准考证号为 n 位数 X1X2Xn(0Xi9),他不希望准考证号上出现不吉利的数字。

他的不吉利数字 A1A2Am(0Ai9)m 位,不出现是指 X1X2Xn 中没有恰好一段等于 A1A2AmA1​ 和 X1 可以为 0

阿申想知道不出现不吉利数字的号码有多少种,输出模 K 取余的结果。


「NOI2014」动物园-KMP
· ✏️ 737 words · ☕ 2 mins read

给定一个字符串 S ,求出 num 数组——对于字符串 S 的前 i 个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作 num[i]

特别地,为了避免大量的输出,你不需要输出 num[i] 分别是多少,你只需要输出所有 (num[i]+1) 的乘积,对 109+7 取模的结果即可。