Power Strings
1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 using namespace std; 5 6 inline int read() 7 { 8 int x=0,f=1;char ch=getchar(); 9 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 10 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 11 return x*f; 12 } 13 14 15 /********************************************************************/ 16 17 const int maxn = 2e7+7; 18 char s[maxn]; 19 int Next[maxn]; 20 21 22 int main(){ 23 while(~scanf("%s", s+1)){ 24 if(s[1] == '.') break; 25 int len = strlen(s+1); 26 int k = 0; 27 Next[1] = 0; 28 for(int i = 2;i <= len;i++){ 29 while(k > 0 && s[k+1] != s[i]){ 30 k = Next[k]; 31 } 32 if(s[k+1] == s[i]){ 33 k++; 34 } 35 Next[i] = k; 36 } 37 38 if(len%(len-Next[len])){ 39 printf("1\n"); 40 } 41 else printf("%d\n", len/(len-Next[len])); 42 43 } 44 return 0; 45 }