View Code
1 /* 2 前缀子串能否有某个周期串重复k次,输出子串长度和最大的k,也就是最小周期情况下的k。 3 也就是说求前缀子串的最大循环节 4 方法: 遍历前缀子串,若周期存在则输出,关键在于如何求最小周期 5 */ 6 #include7 #include 8 #include 9 #include 10 using namespace std;11 int next[1000010];12 string s;13 void get()14 {15 int i=0,j=-1,k;16 memset(next,0,sizeof(next));17 next[0] = -1;18 while(i >T,T)36 {37 int f = 1;38 s.clear();39 cin>>s; 40 get();41 cout<<"Test case #"< <
1 /* 2 前缀子串能否有某个周期串重复k次,输出子串长度和最大的k,也就是最小周期情况下的k。 3 也就是说求前缀子串的最大循环节 4 方法: 遍历前缀子串,若周期存在则输出,关键在于如何求最小周期 5 */ 6 #include7 #include 8 int next[1000010]; 9 char s[1000010];10 int T;11 void get()12 {13 int i=0,j=-1,k;14 memset(next,0,sizeof(next));15 next[0] = -1;16 while(i 1)37 printf("\n");38 scanf("%s",s);39 get();40 printf("Test case #%d\n",flag);41 for(i=2;i<=T;i++)42 {43 temp = i - next[i];44 if(i%temp==0&&i!=temp)//若不加上 i!=temp,第二组会多输出3 1 45 {46 ans = i/temp;47 printf("%d %d\n",i,ans); 48 }49 }50 flag ++;51 }52 return 0;53 }54