HDU3746--KMP+最小循环节
来源:互联网 发布:java泛型里的? 编辑:程序博客网 时间:2024/06/06 00:07
最小循环节求法:
定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len],子串为S[0…len-next[len]-1]。
(1)如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len/L。
(2)如果不能,说明还需要再添加几个字母才能补全。需要补的个数是循环个数L-len%L=L-(len-L)%L=L-next[len]%L,L=len-next[len]。
推荐一篇文章,里面有关于next的优化:http://blog.csdn.net/niushuai666/article/details/696551
代码:
#include<cstdio>#include<cstring>using namespace std;int t,next[100009],len;char a[100009];void getnext(){ int i=0; next[i]=-1; int j=-1; while(i<len) { if(j==-1||a[i]==a[j]) { i++; j++; next[i]=j; } else { j=next[j]; } }}int main(){ scanf("%d",&t); while(t--) { scanf("%s",&a); memset(next,0,sizeof(next)); len=strlen(a); getnext(); int cir=len-next[len]; if(cir!=len && len%cir==0)printf("0\n"); else printf("%d\n",cir-next[len]%cir); }}
阅读全文
1 0
- 【KMP】【HDU3746】【最小循环节】
- HDU3746--KMP+最小循环节
- HDU3746 Cyclic Nacklace(KMP+最小循环节)
- HDU3746 Cyclic Nacklace(KMP,最小循环节)
- HDU3746-KMP循环节
- D - Cyclic Nacklace HDU3746 (kmp 计算字符串最小循环节 )
- hdu3746 Cyclic Nacklace(kmp周期 最小循环节)
- [KMP求最小循环节][HDU3746][Cyclic Nacklace]
- 【KMP】 hdu3746 kmp求循环节长度
- hdu3746 利用KMP找循环节
- hdu3746 Cyclic Nacklace KMP判断循环节
- hdu3746 Cyclic Nacklace(kmp找循环节)
- HDU3746 Cyclic Nacklace KMP找循环节
- HDU3746(KMP求循环节)
- hdu3746(KMP)
- hdu3746 KMP
- hdu3746 Cyclic Nacklace (循环节)
- hdu1358(KMP+最小循环节)
- 给自己的承诺
- java语言基础-方法的递归操作
- mysql之 Innobackupex(全备+增量)备份恢复
- Markdown 安装图解(破解汉化教程)
- 搜索二维矩阵
- HDU3746--KMP+最小循环节
- 编译 链接和加载
- c++ 11 特性随笔
- 文章标题
- java语言基础-引出数组和数组定义
- bzoj1768: [Ceoi2009]logs
- HDU 5533 Dancing Stars on Me 计算几何瞎暴力
- ListView列表控件的介绍和性能优化
- CSDN机器学习笔记三 决策树、随机森林