poj 2406 Power Strings (kmp)

来源:互联网 发布:笔记本温度测试软件 编辑:程序博客网 时间:2024/06/05 02:56
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
abcdaaaaababab.
 

Sample Output
143
 
#include<stdio.h>#include<string.h>const int max=1e6+1;char str[max];int p[max];int i,j,len;void getp(int l){i=0;j=-1;p[i]=j;while(i<l){if(j==-1||str[j]==str[i]){i++,j++;p[i]=j;}else j=p[j];}}int main(){while(scanf("%s",&str)){if(strcmp(str,".")==0)break;len=strlen(str);getp(len);/*for(i=0;i<len;i++)printf("%d ",p[i]);printf("\n");*/if (len % (len - p[len]) == 0)          printf("%d\n", len / (len - p[len]));          else          puts("1");}return 0;}


0 0
原创粉丝点击