[题目大意]:给定一个字符串,求到哪一位时的字串是前几位循环组成的,并求出循环次数。
思路:求每个前缀的最小循环周:从i到n枚举len,如果len%(len-next[len])==0,则这个前缀是由循环节组成的,且循环次数为len/(len-next[len])//len为当前i的值,next[len]为当前j的值。 #include#include #include char a[1000001]; int next[1000001]; int n; void Getnext() { int i=0; int j=-1; next[0]=-1; while(i 1) { printf("%d %d\n",i,i/(i-next[i])); } } else j=next[j]; } } int main() { int k=0; while(scanf("%d",&n)!=EOF) { k++; if(n==0) break; getchar(); for(int i=0;i