题意:给出一个小写字母字符串,求形如ABA(A的长度>=k)的子串个数。位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串。
n<=15000 , k<=100
暴力枚举左右端点就能过。
枚举每个左端点当做首字符进行KMP,对于一个右端点,沿着fail指针跳回去,经过的节点能满足”首字符到这个字符构成的前缀也是当前的后缀“。所以找到一个尽可能长的匹配前缀使得len*2+1<=当前区间长度(因为B这个成分至少要占一个字符),判断len是否大于K即可。
#include<cstdio>
using namespace std;
char t[20000],k;
long long ans=0;
inline long long count(const