Pagini recente » Cod sursa (job #2046336) | Cod sursa (job #3156544) | Cod sursa (job #3283804) | Cod sursa (job #1035445) | Cod sursa (job #172072)
Cod sursa(job #172072)
#include<stdio.h>
#include<string.h>
#define N 1000000
int t,n,pi[N],dif;
char a[N];
void prefix()
{
int i,k;
pi[1]=0;
k=0;
for(i=2;i<=n;i++)
{
while(k>0&&a[k+1]!=a[i])
k=pi[k];
if(a[k+1]==a[i])
k++;
pi[i]=k;
}
}
bool f(int x)
{
if(x==dif)
return true;
if(x-pi[x]!=dif)
return false;
return f(pi[x]);
}
void solve()
{
memset(pi,0,sizeof(pi));
int x;
prefix();
bool ok;
for(x=n;x;x--)
{
dif=x-pi[x];
ok=f(pi[x]);
if(ok&&dif!=x){
printf("%d\n",x);
return;
}
}
printf("0\n");
}
void read()
{
int i;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%s",a+1);
n=strlen(a+1);
solve();
}
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
read();
return 0;
}