题目
说实话,我不知道next数组还能这样子,我之前指挥用next数组求循环节和循环次数。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#define N 1000010
#define LL long long
using namespace std;
char str[N];
int nxt[N];
int main()
{
int t,num=0;
scanf("%d",&t);
while(t--)
{
scanf("%s",str+1);
int len,j,f,ans,f1;
len=strlen(str+1);
nxt[1]=0,j=0;
for(int i=2;i<=len;i++)
{
while(j>0&&str[i]!=str[j+1])j=nxt[j];
if(str[i]==str[j+1])j++;
nxt[i]=j;
}
f=len,ans=0;
while(f>0)
{
f=nxt[f];
ans++;
}
printf("Case #%d: %d\n",++num,ans);
f=len,f1=0;
while(f>0)
{
f=nxt[f];
f1++;
printf("%d",len-f);
if(f1!=ans)printf(" ");
}
printf("\n");
}
return 0;
}