HDU-1358 Period 字符串问题 KMP算法 求最小循环节
Posted tanglizi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU-1358 Period 字符串问题 KMP算法 求最小循环节相关的知识,希望对你有一定的参考价值。
题目链接:https://cn.vjudge.net/problem/HDU-1358
题意
给一个字符串,对下标大于2的元素,问有几个最小循环节
思路
对每个元素求一下minloop,模一下就好
提交过程
TLE | maxn没给够 |
AC |
代码
#include <cstring>
#include <cstdio>
const int maxm=1e6+20;
char P[maxm];
int fail[maxm];
void getFail(int m){
fail[0]=fail[1]=0;
for (int i=1; i<m; i++){
int j=fail[i];
while (j && P[j]!=P[i]) j=fail[j];
fail[i+1]=((P[i]==P[j])?j+1:0);
}
}
int main(void){
int len, kase=0;
while (scanf("%d", &len)==1 && len){
scanf("%s", P);
getFail(len);
printf("Test case #%d
", ++kase);
for (int i=2; i<=len; i++){
int maxloop=i-fail[i];
if (maxloop!=i && i%maxloop==0) printf("%d %d
", i, i/maxloop);
}printf("
");
}
return 0;
}
Time | Memory | Length | Lang | Submitted |
---|---|---|---|---|
78ms | 6100kB | 625 | G++ | 2018-08-02 10:46:24 |
以上是关于HDU-1358 Period 字符串问题 KMP算法 求最小循环节的主要内容,如果未能解决你的问题,请参考以下文章