首页 > 其他 > 详细

POJ2406 Power Strings

时间:2021-08-20 21:24:29      阅读:17      评论:0      收藏:0      [点我收藏+]

题目

KMP算法的熟练运用
由于KMP预处理是对模式串本身进行KMP
所以串尾、pre[size]部分完全一致,且pre[size]和pre[pre[size]]部分一致……
所以就代表一个循环节
若(size-pre[size])刚好能被size整除,则为循环节

#include <cstdio>
#include <iostream>
#include <string>
#define MAXN 1000005
using namespace std;

string str;
int pre[MAXN];

int main() {

    while(cin >> str) {
        if(str==".") break;
        int size = str.length();

        str = ‘ ‘ + str;
        pre[1] = 0; int len = 0;
        for(int i=1;i<size;++i) {
            while(len&&str[i+1]!=str[len+1]) len = pre[len];
            if(str[i+1]==str[len+1]) len++;
            pre[i+1] = len;
        }

        if(pre[size]!=0&&size%(size-pre[size])==0) printf("%d\n",size/(size-pre[size]));
        else puts("1");
    }

    return 0;
}

POJ2406 Power Strings

原文:https://www.cnblogs.com/Neworld1111/p/15168068.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!