标签:
Description
Input
Output
Sample Input
3 aaa 12 aabaabaabaab 0
Sample Output
Test case #1 2 2 3 3 Test case #2 2 2 6 2 9 3 12 4
上次做也没有深刻理解next数组的意义 做了这道题 让我理解到 (仅仅是我的理解,错了别喷我。。)next数组的作用就是在匹配主串的时候
遇到了不相同的字符 通过next数组快速跳过已经匹配过的字符。具体解释请看这位大牛写的
做了这道题也知道了next数组可以找循环节 唉 真的想不到
#include <stdio.h> int next[1000000+10]; char str[1000000+10]; int n; void set_next() { int i=-1; int j=0; next[0]=-1; while(j<n) { if(i==-1||str[i]==str[j]) { i++;j++; next[j]=i; } else i=next[i]; } } int main() { int t=0; while(~scanf("%d",&n)&&n) { scanf("%s",str); set_next(); printf("Test case #%d\n",++t); for(int i=1;i<=n;i++) { // printf("%d\n",next[i]); int length=i-next[i]; if(i!=length&&i%length==0) printf("%d %d\n",i,i/length); } printf("\n"); } }
标签:
原文地址:http://blog.csdn.net/su20145104009/article/details/51396856