HDU 1358 Period
HDU
2023-09-27 14:22:40 时间
题意:求该字符串(前面一部分)存在循环的最小循环节是多少,输出所有满足该条件的 前缀长度和最小循环节长度
#include <stdio.h> char P[1000010];//从0开始存 int f[1000010];//记录P的自我匹配 int Len; void getFail(){ int m=Len; f[0]=f[1]=0; for(int i=1;i<m;i++){ int j=f[i]; while(j&&P[i]!=P[j])j=f[j]; f[i+1]= P[i]==P[j] ? j+1 : 0; } } int main(){ int Case=1; while(scanf("%d",&Len),Len){ scanf("%s",P); getFail(); printf("Test case #%d\n",Case++); for(int i=2;i<=Len;i++) if(f[i]>0 && i% (i-f[i])==0) printf("%d %d\n",i,i/(i-f[i])); printf("\n"); } return 0; }
相关文章
- HDU 5299 Circles Game
- HDU 2563 统计问题(递推)
- hdu 4597 Play Game
- HDU 6382 odds (暴力 + 剪枝优化)
- HDU 5944 Fxx and string (暴力)
- HDU 2602 Bone Collector (01背包DP)
- HDU 5835 Danganronpa (水题)
- HDU 5702 Solving Order (水题,排序)
- Tr A HDU 1575 (矩阵快速幂)
- 【HDU 4408】Minimum Spanning Tree(最小生成树计数)
- hdu - 4971 - A simple brute force problem.(最大权闭合图)
- hdu 2527 Safe Or Unsafe (优先队列实现Huffman)