poj 2406
http://poj.org/problem?id=2406
题意:给你一个字符串,要你找到它是最多是由它多少个子串构成的
思路:如果这个字符串可以由它的子串构成,那么它的next[len]的这个值与len肯定是倍数关系,len-next[len]就是等于子串的长度
1 #include <stdio.h> 2 #include <string.h> 3 const int maxn = 1e6+25; 4 5 char str[maxn]; 6 int next[maxn]; 7 8 9 void getnext() 10 { 11 int len = strlen(str); 12 int i = 0,j = -1; 13 next[0] = -1; 14 while(i<len) 15 { 16 if(j==-1||str[i]==str[j]) 17 next[++i] = ++j; 18 else 19 j = next[j]; 20 } 21 } 22 23 int main() 24 { 25 while(scanf("%s",str),str[0]!='.') 26 { 27 memset(next,0,sizeof(next)); 28 getnext(); 29 int ans = 1; 30 int len = strlen(str); 31 if(len%(len-next[len])!=0) 32 printf("1\n"); 33 else 34 printf("%d\n",len/(len-next[len])); 35 } 36 return 0; 37 }