BZOJ.3620.似乎在梦中见过的样子(KMP)
2024-08-25 16:37:23
/*
896kb 6816ms
A+B+A是KMP的形式,于是固定左端点,对于每个位置i,若fail[i]所能到的点k中(k=fail[fail[fail[...]]]),有满足len(l~k)+len(i-k+l-1,i)<len(l,i),且len(l~k)>=K,则i满足条件
每个位置仅计算一次 就很好做了
O(n^2) 也能过。。
*/
#include <cstdio>
#include <cstring>
const int N=15010;
int n,K,res,fail[N];
char s[N];
void KMP(int p)
{
fail[p]=p-1;
for(int k,j,i=p+1; i<=n; ++i)
{
j=fail[i-1];
while(j>=p && s[i]!=s[j+1]) j=fail[j];
k=fail[i]= s[i]==s[j+1]?j+1:p-1;
while(i-p+1<=2*(k-p+1)) k=fail[k];
if(k-p+1>=K) ++res;
}
}
int main()
{
scanf("%s%d",s+1,&K), n=strlen(s+1);
for(int i=1; i<=(n-2*K); ++i) KMP(i);//别去了等号。。
printf("%d",res);
return 0;
}
最新文章
- Linux 江湖系列阶段性总结
- tomcat 504 gateway time-out
- 使用antd UI组件有感
- 对于C(n,k)取模
- javascript方法 call()和apply()的用法
- 约跑APP测试报告
- linux驱动之I2C
- #pragma warning (default : n)
- 听听Matt Rogish说怎么面试程序员
- DM6446开发攻略——u-boot-1.3.4移植(1)
- Windows下结束tomcat进程,dos命令
- 凹凸曼的修改zencart 程序(经典!)
- CentOS 7.6环境下安装中文字体库
- M1/M2 总结
- 【洛谷P4735】最大异或和
- python 实现排序算法(三)-选择排序和冒泡排序
- Python(28)---模块和包的基本概念
- xampp 教程
- spring-data-mongodb关于id的坑
- 《EMCAScript6入门》读书笔记——24.编程风格