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算法 求最小循环节的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1358 Period

Period HDU 1358 KMP next数组性质的应用

hdu-1358 Period

HDU-1358-Period(KMP, 循环节)

hdu 1358 Period(kmp)

HDU - 1358 - Period (KMP)