[KMP求最小循环节][HDU1358][Period]
来源:互联网 发布:知乎如何回答问题 编辑:程序博客网 时间:2024/05/02 19:59
题意
求所有循环次数大于1的前缀
的最大循环次数和前缀位置
解法
直接用KMP求最小循环节
当满足i%(i-next[i])&&next[i]!=0
前缀循环次数大于1
最小循环节是i-next[i]
#include <cstdio>#include <cstring> #include <iostream>#include <cstdlib>using namespace std;char S[2000000];int NEXT[2000000];int len;int CASE=0;void get_next(){ for(int i=1;i<=len;i++) { int p=i-1; while(S[i]!=S[NEXT[p]+1]&&p!=0) p=NEXT[p]; if(p!=0) NEXT[i]=NEXT[p]+1; }}int main(){ int N;// freopen("a.in","r",stdin); while(cin>>N&&N) { memset(S,0,sizeof(S)); memset(NEXT,0,sizeof(NEXT)); printf("Test case #%d\n",++CASE); scanf("%s",S+1); len=strlen(S+1); get_next(); for(int i=1;i<=len;i++) { if(i%(i-NEXT[i])==0&&NEXT[i]!=0) { printf("%d %d\n",i,i/(i-NEXT[i])); } } printf("\n"); }}
0 0
- [KMP求最小循环节][HDU1358][Period]
- HDU1358-Period(kmp-求前缀长度和最小循环节长度 )
- HDU1358 Period KMP循环节问题
- HDU1358 Period(KMP,找循环节)
- hdu1358(KMP+最小循环节)
- hdu1358 Period (循环节)
- Period--KMP,最小循环节
- UVALive 3026 Period ( kmp 求前缀最小循环节)
- poj1961--Period(KMP求最小循环节)
- (POJ1961)Period <KMP算法求最小循环节>
- KMP + 求最小循环节 --- HDU 1358 Period
- POJ 1961 Period——kmp求最小循环节
- HDU1358 Period(KMP找循环前缀)
- hdu1358 KMP循环节
- hdu1358 最小循环节,最大循环次数 KMP
- Period hdu1358 KMP
- hdu1358 period ,Kmp
- hdu1358 Period kmp+模拟
- 数据库的数据类型
- 焊锡丝的含锡量越高越好吗?
- java面试四 运算符测试
- hibernate性能优化学习笔记
- Java学习笔记_001_基础知识
- [KMP求最小循环节][HDU1358][Period]
- hibernate锁-学习笔记
- android图片的上传、下载和一些缩放操作
- 【经典算法】:关于硬币称重问题及编程实现
- 处理器调度(操作系统)
- Xcode 添加 SVN 出现 nsurlerrordomain error 1012
- Andoird graphics-PathEffect
- Spring入门-学习笔记
- 2016校招 赛码网 javascript调试方案