POJ-2406 Power Strings

来源:互联网 发布:cms监控软件 编辑:程序博客网 时间:2024/04/30 17:17

题目链接:

http://poj.org/problem?id=2406

题目大意:

求该字符串的最多重复次数

解题思路:

总长度/最小循环节

代码如下:

#include <math.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;int ans;int srcLen;char src[1000000 + 8];int kmpNext[1000000 + 8];void init();void kmp_per();void KMP();int main(){memset(src, 0, sizeof(src));while (scanf("%s", &src) != EOF&&src[0] != '.'){init();KMP();printf("%d\n", ans);}return 0;}void init(){ans = -1;srcLen = strlen(src);memset(kmpNext, 0, sizeof(kmpNext));}void kmp_per(){int i = 0;int j = -1;kmpNext[0] = -1;while (i < srcLen){while (-1 != j&&src[i + 1] != src[j + 1]){j = kmpNext[j];}if (src[i + 1] == src[j + 1]){j++;}i++;kmpNext[i] = j;}}void KMP(){kmp_per();ans = 0;printf("%d %d\n", srcLen, (srcLen - kmpNext[srcLen - 1] - 1));if (srcLen % (srcLen - kmpNext[srcLen - 1] - 1)){ans = 1;}else{ans = srcLen / (srcLen - kmpNext[srcLen - 1] - 1);}}


0 0
原创粉丝点击