博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3746 Cyclic Nacklace(KMP+最小循环节)题解
阅读量:6478 次
发布时间:2019-06-23

本文共 1224 字,大约阅读时间需要 4 分钟。

思路:

的解释在这里,有人证明了那么就很好计算了

之前对KMP了解不是很深啊,就很容易做错,特别是对fail的理解

代码:

#include
#include
const int N = 1000000+5;const int INF = 0x3f3f3f3f;using namespace std;int fail[N];char p[N],t[N];void getFail(){ fail[0] = -1; int j = 0,k = -1; int len = strlen(p); while(j <= len){ //给等号 if(k == -1 || p[j] == p[k]){ if(p[++j] == p[++k]) fail[j] = fail[k]; else fail[j] = k; } else{ k = fail[k]; } }}int KMP(){ int num = 0; getFail(); int i = 0,j = 0; int lent = strlen(t),lenp = strlen(p); while(i < lent){ if(j == -1 || t[i] == p[j]){ i++; j++; if(j == lenp) num++; } else{ j = fail[j]; } } return num;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%s",p); getFail(); int len = strlen(p); int c = len - fail[len]; //最小循环节 if(len % c == 0){ if(len == c) printf("%d\n",c); else printf("0\n"); } else{ printf("%d\n",c - len%c); } } return 0;}

转载于:https://www.cnblogs.com/KirinSB/p/9408775.html

你可能感兴趣的文章
linux安装java环境
查看>>
你可能不知道的一些PHP函数的特性
查看>>
C语言实现将彩色BMP位图转化为二值图
查看>>
CSS Pocket Reference
查看>>
SpringMVC之类型转换Converter
查看>>
多线程(二)
查看>>
使用innobackupex进行mysql备份
查看>>
CentOS 7环境下安装chrome浏览器
查看>>
Python的包管理工具Pip
查看>>
java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量...
查看>>
Docker容器网络设置
查看>>
java opts 参数
查看>>
left join,right join, inner join
查看>>
2018-7-13 比特币区块链今天存放的信息
查看>>
跳跃表
查看>>
使用git命令将本地项目上传到Gitlab上
查看>>
又被坑一次
查看>>
!JS实战之随机像素图
查看>>
ReactiveCocoa学习笔记(一)
查看>>
今天终于读出了著名“卖鸡”面试题的深意
查看>>