Power Strings
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 51222 | Accepted: 21388 |
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 4 3
思路:循环节只要不被长度整出就输出1.
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; char a[1000010]; int f[1000010]; int len; void getnext() { int i,j=0; f[1]=0; for(i=2; i<=len; i++) { while(j>0&&a[j+1]!=a[i]) j=f[j]; if(a[j+1]==a[i]) j++; f[i]=j; } } int main() { while(gets(a+1)) { if(!strcmp((a+1) , ".")) break; len=strlen(a+1); getnext(); int l=len-f[len]; if(len%l==0) { printf("%d\n",len/l); } else { printf("1\n"); } } return 0; }