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;
}
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;
}
相关文章推荐
- POJ 1961 Period(KMP最小循环节)
- KMP 求最小循环节 POJ - 1961 Period
- poj 1961 Period (KMP+最小循环节)
- poj1961--Period(KMP求最小循环节)
- POJ 1961 Period【KMP最小循环节】
- LA 3026 && POJ 1961 Period (利用kmp中的next数组找最小的循环节 )
- Period POJ - 1961(kmp求最大周期,最小循环节)
- POJ 1961 Period KMP 最小循环节
- POJ 1961Period / POJ 2406 Power Strings / POJ 3461 Oulipo /SDUT 2747 循环节 初涉KMP
- poj 1961 Period【求前缀的长度,以及其中最小循环节的循环次数】
- LA 3026 && POJ 1961 Period(KMP求前缀的最短循环节)
- poj 1961 Period(kmp最短循环节)
- POJ 1961 2406 (KMP,最小循环节,循环周期)
- poj 1961 Period(kmp最短循环节)
- poj 1961 Period (最小重复子串 kmp)
- POJ 1961 Period(kmp循环节)
- poj 1961 Period (KMP 最短循环节)
- Kmp找字符串循环节——Period ( POJ 1961 )
- 【 poj 1961 】Period 【KMP 求所有前缀的循环节】
- poj 1961 Period(KMP, 最短循环节)