您的位置:首页 > 其它

POJ 1961 Period——kmp求最小循环节

2017-08-21 19:57 555 查看
就是kmp求最小循环节在套一个循环,关于kmp求最小循环节请看

http://blog.csdn.net/hao_zong_yin/article/details/77455285

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6 + 10;
char p[maxn];
int flag = 0, n, Next[maxn];
void makeNext() {
int i = 0, j = 0;
Next[i] = j;
for (i = 1; i < n; i++) {
while (j && p[i] != p[j]) j = Next[j - 1];
if (p[i] == p[j]) j++;
Next[i] = j;
}
}
int main() {
while (scanf("%d", &n) == 1 && n) {
scanf("%s", p);
makeNext();
if (flag++) printf("\n");
printf("Test case #%d\n", flag);
for (int i = 1; i < n; i++) {
int L = (i + 1) - Next[i];
if ((i + 1) != L && (i + 1) % L == 0) {
printf("%d %d\n", i + 1, (i + 1) / L);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: