hdu1358(kmp循环节)
http://acm.hdu.edu.cn/showproblem.php?pid=1358
#include<iostream> #include<string.h> using namespace std; #define M 1000005 int next[M]; char s[M]; void getnext() { int i=0,j=-1; next[0]=-1; int len=strlen(s); while(i<len) { if(j==-1||s[i]==s[j]) { i++; j++; next[i]=j; } else j=next[j]; } } int main() { int text=0,n; while(scanf("%d",&n)>0&&n) { scanf("%s",s); getnext(); printf("Test case #%d\n",++text); int i,j=0; int len=strlen(s); for(i=1;i<len;i++) { if(next[i+1]!=0&&(i+1)%(i+1-next[i+1])==0) { printf("%d %d\n",i+1,(i+1)/(i+1-next[i+1])); } } printf("\n"); } return 0; }
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。