#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int MAXN = 1000000+5;
int next[MAXN];
char ch[MAXN];
int count;
void kmp_pre(char x[], int m, int next[]){ //dp思想 递推方法实现 求next[]
int i, j;
j = next[0] = -1;
i = 0;
while(i<m){
while(j!=-1&&x[i]!=x[j]) j = next[j];
next[++i] = ++j;
}
}
void solve(int n){
int i;
int t;
printf("Test case #%d\n",++count);
for(i = 2; i<=n; i++) {
t=i-next[i];
if(i%t==0 && i/t>1) printf("%d %d\n",i,i/t);
}
}
int main(){
count = 0;
int n;
while(scanf("%d",&n),n){
scanf("%s", ch);
kmp_pre(ch, n, next);
solve(n);
printf("\n");
}
}
hdu1358
最新推荐文章于 2020-03-25 18:50:00 发布