#P17185. 串串
串串
1001. 串串
题目描述
-
定义一个字符串 t 为 k 优秀的,当且仅当满足以下条件:
-
t = A1 + A2 + ⋯ + Ak,其中 “+” 表示字符串连接;
-
对于所有 i ≥ 2,有 ∣Ai ∣ = ∣Ai−1 ∣ + 1。对于一个字符串 t,我们
用 ∣t∣ 表示串 t 的长度;
-
∣A1 ∣ ≥ 1;
-
对于所有 i ≥ 2,有 lcp(Ai, Ai−1)= ∣Ai−1 ∣。
其中 lcp(x, y) 表示字符串 x 与 y 的 最长公共前缀长度。也就是说, lcp(x, y) 表示从开头开始,x 和 y 有多少个连续的字符是相同的。例如:
-
lcp("abcde", "abf") = 2;
-
lcp("aaaa", "aa") = 2;
-
lcp("abc", "xyz") = 0。
给定一个长度为 n 的、仅由小写字母组成的字符串 s 和一个正整数 k,请你计算字符串中有多少个子串是 k 优秀的。两个子串 s[L1, R1 ] 和 s[L2, R2 ] 被认为不同,当且仅当满足以下任意
一个条件:
-
L1 = L2;
-
R1 = R2。
输入格式
每个测试文件包含多组测试数据。
第一行包含一个整数 T = 1505,表示测试数据的组数。对于每组测试数据:
-
第一行包含两个整数 n(1 ≤ n ≤ 105)和 k (2 ≤ k ≤ 2 × 105),具体含义见题面;
-
第二行包含一个长度为 n 的字符串 s。
数据保证 ∑ n ≤ 5 × 105。
输出格式
对于每组测试数据,输出一个整数,表示满足条件的 k 优秀子串的数量。
样例输入
2
5 2
aaaaa
7 3
aababca
样例输出
4
1
提示
对于第二组样例,唯一优秀的字符串为 s[1, 6],可以表示为 "a" +"ab" + "abc"。
来源:官方题面 PDF(2026"钉耙编程"暑期联赛 第10场)