HDU 4333:Revolving Digits KMP+扩展KMP
来源:互联网 发布:天猫淘宝商城童装女 编辑:程序博客网 时间:2024/06/10 03:07
扩展KMP的姿势
扩展KMP可以在
给定两个串
算法过程:
类似的,我们令
令
假设当前要计算
则有
令
若
否则,先令
算法结束后,如果当前
求解
扩展KMP算法是十分优秀的,常见的应用有:
1.求最长公共前缀。
2.求解重复子串的长度:
如串
然后这道题,我们可以把原串补在后面一遍,然后求出
然后至于重复的串,我们可以用kmp来求一下最小循环节,将三个答案都除以最小循环节出现的个数就好了。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a,b,c,len;int p[100005],q[100005];char s[200005];int main(){ int testcase; scanf("%d",&testcase); for (int T=1;T<=testcase;T++) { scanf("%s",s+1); int j=0; p[1]=0; len=strlen(s+1); for (int i=2;i<=len;i++) { while (j&&s[j+1]!=s[i]) j=p[j]; if (s[j+1]==s[i]) j++; p[i]=j; } int tmp=len%(len-p[len])==0?len/(len-p[len]):1; for (int i=1;i<=len;i++) s[i+len]=s[i]; len<<=1; int p=1; q[1]=len; while (p<=len&&s[p]==s[p+1]) p++; q[2]=p-1; int k=2; for (int i=3;i<=len>>1;i++) { int p=k+q[k]-1; q[i]=min(q[i-k+1],max(p-i+1,0)); while (i+q[i]<=len&&s[q[i]+1]==s[i+q[i]]) q[i]++; if (i+q[i]>k+q[k]) k=i; } len>>=1; a=b=c=0; for (int i=1;i<=len;i++) if (q[i]>=len) b++; else if (s[q[i]+1]>s[i+q[i]]) a++; else c++; printf("Case %d: %d %d %d\n",T,a/tmp,b/tmp,c/tmp); } return 0;}
- HDU 4333:Revolving Digits KMP+扩展KMP
- hdu - 4333 - Revolving Digits - 扩展kmp
- HDU 4333 Revolving Digits (扩展KMP)
- hdu 4333 Revolving Digits 扩展kmp
- HDU 4333 Revolving Digits 扩展KMP
- HDU 4333 Revolving Digits 扩展KMP
- hdu 4333 Revolving Digits(扩展kmp)
- hdu 4333 Revolving Digits (扩展kmp)
- HDU 4333 Revolving Digits(扩展KMP啊)
- HDU 4333 Revolving Digits 扩展KMP
- HDU---4333-Revolving Digits(扩展KMP)
- hdu 4333 Revolving Digits(扩展KMP)
- HDU 4333 Revolving Digits [扩展KMP]
- Hdu 4333 Revolving Digits 扩展KMP
- HDU 4333 Revolving Digits 扩展kmp
- hdu 4333 Revolving Digits (扩展KMP)
- HDU 4333 Revolving Digits (扩展KMP)
- HDU 4333 Revolving Digits(KMP:循环节+扩展KMP)
- http请求的一些解释
- C++虚继承的概念
- 浙大PAT 1020. Tree Traversals (25)
- 判断服务是否还活着的工具类
- UINavigationController--导航控制器
- HDU 4333:Revolving Digits KMP+扩展KMP
- 数据库应用-后缀树及后缀数组(Suffix-Bäume&Suffix-Arraz)-2
- jstl标签fn
- H.264 Profile、Level、Encoder三张简图
- Java Callable用法
- java项目中的几种bean对象
- 如何卸载lnmp
- POJ 3252 Round Numbers (数论&&组合)
- PLC远程监控,PLC远程监视之通过花生壳,内网服务器映射