POJ 2406 Power Strings 1961的简化版,kmp的next数组的应用

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

跟1961差不多,题解就不写了,一开始理解错题了,导致WA一次。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 int n, next[1000010];
 5 char s[1000010];
 6 void kmp_init()
 7 {
 8     int j = -1;
 9     next[0] = -1;
10     for(int i = 1; i < n; i++)
11     {
12         while(j >= 0 && s[j+1] != s[i])
13             j = next[j];
14         if(s[j+1] == s[i])
15             j++;
16         next[i] = j;
17     }
18 }
19 int main()
20 {
21     while(scanf("%s", s) != EOF && strcmp(s, "."))
22     {
23         int ans = 1;
24         n = strlen(s);
25         kmp_init();
26         if(n % (n-1 - next[n-1]) == 0)
27             ans = n / (n-1 - next[n-1]);
28         printf("%d\n", ans);
29     }
30     return 0;
31 }
View Code

 

posted @ 2013-11-15 20:28  Anti-Magic  阅读(140)  评论(0编辑  收藏  举报