#kMPybttg020205. 1469:似乎在梦中见过的样子

1469:似乎在梦中见过的样子

好的,这是整理好的题面,格式清晰。


题目描述

给定一个长度为 ( n ) 的字符串 ( S ),以及一个整数 ( k )。

定义一个子串形如 ( A + B + A ),其中 ( |A| \ge k ),( |B| \ge 1 ),且 ( A, B ) 都是字符串(“+”表示拼接)。
注意:

  1. 位置不同但内容相同的子串算不同子串;
  2. 同一个子串可能有不同拆分方式(例如 "aba" 可以拆成 A="a", B="b"A="", B="ab" 等等),但只要子串相同,就算作同一个。

问:满足条件的子串 ( A+B+A ) 有多少个(不同位置的子串计数)。


输入格式

第一行一个字符串 ( S )。
第二行一个整数 ( k )。

输出格式

输出一个整数,表示满足条件的子串数量。


数据范围

  • ( 1 \le |S| \le 1.5 \times 10^4 )
  • ( 1 \le k \le 100 )
  • 字符串仅由小写字母组成

输入样例 1

aaaaa
1

输出样例 1

6

输入样例 2

abcabcabc
2

输出样例 2

8

样例解释

样例 1

字符串 "aaaaa",( k = 1 )。

我们要找子串形如 ( A + B + A ),且 ( |A| \ge 1, |B| \ge 1 )。

可能的子串(只考虑不同的位置):

  1. 从位置 1 开始长度 3:"aaa",可以拆成 A="a",B="a" ✅
  2. 从位置 1 开始长度 4:"aaaa",拆成 A="a",B="aa" ✅
  3. 从位置 1 开始长度 5:"aaaaa",拆成 A="a",B="aaa" ✅
  4. 从位置 2 开始长度 3:"aaa"
  5. 从位置 2 开始长度 4:"aaaa"
  6. 从位置 3 开始长度 3:"aaa"

共 6 个。

注意:同一个子串在不同位置算不同子串,所以位置 1 的长度 3 子串与位置 2 的长度 3 子串虽然内容相同,但位置不同,算两个。

样例 2

字符串 "abcabcabc",( k = 2 )。

需要 ( |A| \ge 2, |B| \ge 1 )。

符合条件的子串有 8 个(具体略,符合题目给出的 8)。


这样题目就完整了,包括题意、输入输出格式、数据范围、样例及解释。