标签:scanf each several bsp 输出 aaa == span eve
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1358
题目类型:
字符串-KMP
题意概括:
找出从第二个字符开始,之前所有的字符是否是循环串,如果是,输出当前字符的下标(此题下标从1开始)和周期(T>1)
解题思路:
通过KMP算法找出循环,并通过下标相减判断循环节。
题目:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8105 Accepted Submission(s): 3902
# include <stdio.h> # define MAX 1000010 char a[MAX]; int l,next[MAX]; void get_next() { int i,j; i=0; j=-1; next[0]=-1; while(i<l) { if(j==-1 || a[i]==a[j]) { i++; j++; next[i]=j; } else j=next[j]; } } void kmp() { int k,i; for(i=2;i<=l;i++) { k=i-next[i]; if(i!=k && i%k==0) printf("%d %d\n",i,i/k); } } int main () { int ret=0; while(scanf("%d",&l),l) { ret++; getchar(); gets(a); get_next(); printf("Test case #%d\n",ret); kmp(); printf("\n"); } }
标签:scanf each several bsp 输出 aaa == span eve
原文地址:http://www.cnblogs.com/love-sherry/p/6942558.html