考察kmp理解题

Description

“Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约.
这是 Modoka 的一个噩梦,也同时是上个轮回中所发生的事.为了使这一次 Madoka 不再与 QB签订契约,Homura 决定在刚到学校的第一天就解决 QB.然而,QB 也是有许多替身的(但在第八话中的剧情显示它也有可能是无限重生的),不过,意志坚定的 Homura 是不会放弃的——她决定
消灭所有可能是 QB 的东西.现在,她已感受到附近的状态,并且把它转化为一个长度为 n 的字符串交给了学 OI 的你.
现在你从她的话中知道 , 所有形似于 A+B+A 的字串都是 QB 或它的替身 , 且len(A)>=k,len(B)>=1 (位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串),然后你必须尽快告诉 Homura 这个答案——QB 以及它的替身的数量.

Input

第一行一个字符串,第二行一个数 k

Output

仅一行一个数 ans,表示 QB 以及它的替身的数量

Sample Input

【样例输入 1】
aaaaa
1
【样例输入 2】
abcabcabc
2

Sample Output

【样例输出 1】
6

【样例输出 2】
8

HINT

对于 100%的数据:n<=15000 , k<=100,且字符集为所有小写字母


题目分析

由于起点不固定,那么相当于是做$n$次kmp。为方便起见,以下的题解只讨论第一次kmp的情况。

暴力做法

考虑子串$[1,i]$若存在贡献,那么$fail[i]$一直向上的路径上必定存在节点$j$使得$fail[j]<k,j≥k且2k+1≤i$.

那么每一次暴力向上跳来检查是否合法。时间复杂度$O(n^3)$

分析一下

把$fail[]$视作树形结构。由于这个结构的更新是自顶向下的,就可以顺带维护一个路径上大于等于$k$的最短前缀长度。时间复杂度$O(n^2)$

 #include<bits/stdc++.h>
const int maxn = ;
const int INF = 1e9; char s[maxn];
int k,fail[maxn],mn[maxn],n,ans; int main()
{
// freopen("seq10.in","r",stdin);
scanf("%s%d",s+,&k);
n = strlen(s+), mn[] = INF;
for (int t=; t<=n; t++)
{
for (int i=t, j=, x; i<n; i++)
{
while (j!=&&s[i+]!=s[j+t]) j = fail[j];
if (s[i+]==s[j+t]) j++;
// x = j;
// while (fail[x] >= k) x = fail[x];
if (j < k) mn[j] = INF;
else mn[j] = std::min(mn[fail[j]], j);
x = mn[j];
if (x >= k&&*x <= i-t+) ans++;
fail[i+-t+] = j;
}
}
printf("%d\n",ans);
return ;
}

END

最新文章

  1. React Native填坑之旅--Flow篇(番外)
  2. easyconf——基于AugularJS的配置管理系统开发框架
  3. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
  4. js整理3
  5. php中高级基础知识点
  6. RMI、Hessian、Burlap、Httpinvoker、WebService的比较
  7. Hive优化(转)
  8. [liu yanling]软件开发的过程按阶段划分有:单元测试 集成测试 系统测试 验收测试
  9. redis安装过程中遇到的问题
  10. Mac OS下SVN的使用:服务的和客户端
  11. PAT (Advanced Level) 1102. Invert a Binary Tree (25)
  12. uibutton颜色设置
  13. jenkins2 -pipeline 常用groovy脚本
  14. Node.js 常用工具
  15. Django 传递额外参数及 URL别名
  16. 使用git 遇见的错误使用到的命令
  17. OO第一单元优化博客
  18. python之type函数
  19. LinkedBlockingQueue中put源码分析
  20. JS调试技巧

热门文章

  1. python进阶08 MySQL基础补充
  2. G.点我
  3. 【填坑】loj6159. 「美团 CodeM 初赛 Round A」最长树链
  4. NSSM把.Net Core部署至 Windows 服务
  5. AspNet Zero Core
  6. B. Batch Sort
  7. PHP&amp;Java 调用C#的WCF
  8. 《从0到1学习Flink》—— Flink 配置文件详解
  9. mysql explain 的extra中using index ,using where,using index condition,using index &amp; using where理解
  10. RHEL6.4 安装 highpoint RocketRAID 2720 阵列卡驱动