poj 2406 Power Strings(KMP求最大循环次数)

来源:互联网 发布:网络主播的真实收入 编辑:程序博客网 时间:2024/06/05 14:54

题意: 求出最长的循环次数

题解:
如下图:
下标
012345678910字符ababababab
next-10012345678由图可知next[10]=8 表示前八个字符与后八个字符相同,且为前10-8个字符的循环出现,也就是说最大的循环次数是=10/(10-8)。

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int M = 1000010;int nxt[M];char T[M];int n,m;int ans;void getnext(){    int j, k;    j = 0; k = -1; nxt[0] = -1;    while(j<m){        if (k==-1 || T[j]==T[k]){            nxt[++j] = ++k;        }        else{            k = nxt[k];        }    }}int main(){  while(scanf("%s",&T)!=EOF){  if(T[0]=='.') break; m=strlen(T);        getnext();        if(m%(m-nxt[m])==0) printf("%d\n",m/(m-nxt[m]));//****        else printf("1\n");   } return 0;}

0 0
原创粉丝点击