http://poj.org/problem?id=1961
(1)题意:给定一个长度为n的字符串,求他的前缀且前缀满足本身为周期字符串。例:aabaabaab 长度为9 周期为3
(2)用到kmp
他人具体代码:
View Code
#include <cstdio> #include <iostream> #include <cstring> #define maxn 1000004 using namespace std; int next[maxn]; void GetNext(char *s) { int len = strlen(s); int i,j; i = 0; j = -1; next[0] = -1; for (i = 1; i < len; ++i) { while (j > -1 && s[j + 1] != s[i]) j = next[j]; if (s[j + 1] == s[i]) ++j; next[i] = j; } } int main() { int n,i; char s1[maxn]; int cas = 1; while (~scanf("%d",&n)) { if (!n) break; printf("Test case #%d\n",cas++); scanf("%s",s1); GetNext(s1); for (i = 0; i < n; ++i) { int d = (i + 1)%(i - next[i]); if (d == 0 && next[i] != -1) { printf("%d %d\n",i + 1,(i + 1)/(i - next[i])); } } printf("\n"); } return 0; }
