Power Strings POJ - 2406

最小循环节问题

#include<cstdio>
#include<cstring>
using namespace std;
const int max_n = 1e6 + 100;
char s[max_n];
int net[max_n];
int n;
void get_next(char* p) {
    net[0]=-1;
    for (int i = 0, j = -1;i < n;) {
        if (j == -1 || p[i] == p[j])net[++i] = ++j;
        else j = net[j];
    }
}

int main() {
    while (scanf("%s",s)) {
        if (s[0] == '.')break;
        n = strlen(s);
        get_next(s);
        int len = n - net[n];
        if (n % len == 0)printf("%d\n",n/len);
        else printf("1\n");
    }
}
Kuangbin题单详解(kmpManacher) 文章被收录于专栏

刷Kuangbin题

全部评论

相关推荐

把实习生当正职使昨天第一天就加班,晚上连口饭都没吃上,以后日子咋过,我不想干了
码农索隆:实习不怕忙,就怕干的活重复且没难度,要干就干那种有深度有难度的任务,这样才能快速的提升
实习吐槽大会
点赞 评论 收藏
分享
一tiao酸菜鱼:秋招还没正式开始呢,就准备有结果了。。。。?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务