Description
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).
Input
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
Output
For each s you should print the largest n such that s = a^n for some string a.
Sample Input
abcd aaaa ababab .
Sample Output
1 43
kmp应用
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<stack> using namespace std; const int maxn = 1000005; int nt[maxn], T, tot; char s1[maxn], s2[maxn]; int main() { while (scanf("%s", s1) == 1 && s1[0] != '.') { nt[0] = -1; int i; for (i = tot = 0; s1[i]; i++) { int j = nt[i]; while (j >= 0 && s1[j] != s1[i]) j = nt[j]; nt[i + 1] = j + 1; } if (i % (i - nt[i])) tot = 1; else tot = i / (i - nt[i]); printf("%d\n", tot); } return 0; }