hdu1358
来源:互联网 发布:出售一审淘宝店铺 编辑:程序博客网 时间:2024/06/05 03:30
#include <iostream>#include <cstdio>#include <cstring>using namespace std;char t[1000005];int next[1000005];void get_next(int n){ int i=0; int k=-1; next[0]=-1; while(i<=n) { if(k==-1||t[i]==t[k]) i++,k++,next[i]=k; else k=next[k]; }}int main(){ int n; int o=1; while(scanf("%d",&n),n!=0) { scanf("%s",t); get_next(n); int i; printf("Test case #%d\n",o++); for(i=1;i<=n;i++) { if(i%(i-next[i])==0&&next[i]!=0) //i-next[i]是周期 printf("%d %d\n",i,i/(i-next[i])); } printf("\n"); } return 0;}