E-power strings
Time limit:3000 Ms
Memory limit:65536kb
64bit Io format:% I64d & % i64usubmit status practice poj 2406
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 shoshould print the largest N such that S = a ^ N for some string.
Sample Input
abcdaaaaababab.
Sample output
143
After talking about this, it is actually a problem of finding the minimum cycle in a string. The time limit is 3 s. We can use enumeration.
Note the following:Cycle stringBasic algorithm:
For (I = 1; I <= Len; I ++)
{
OK = 1;
If (LEN % I = 0)
{
For (j = I; j <Len; j ++)
{
If (s [J]! = S [J % I]) {OK = 0; break ;}
}
}
If (OK = 1)
{
Printf ("% d \ n", Len/I );
Break; // remember to use break
}
}
1 #include<cstdio> 2 #include<string.h> 3 using namespace std; 4 char s[1000100]; 5 int main() 6 { 7 while(scanf("%s",s)==1&&strcmp(s,".")!=0) 8 { 9 int len=strlen(s);10 11 for(int i=1;i<=len;i++)12 if(len%i==0)13 {14 int ok=1;15 for(int j=i;j<len;j++)16 {17 if(s[j]!=s[j%i])18 {19 ok=0;20 break;21 }22 }23 if(ok)24 {25 printf("%d\n",len/i);26 break;27 }28 29 }30 }31 return 0;32 }