Pagini recente » Cod sursa (job #1946371) | Cod sursa (job #1059092) | Cod sursa (job #593930) | Cod sursa (job #633705) | Cod sursa (job #177868)
Cod sursa(job #177868)
#include <cstdio>
#include <string.h>
using namespace std;
long t,i,j,q,n,pi[1000100],mx,x;
char s[1000001];
int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&t);
for (q=1;q<=t;q++)
{
memset(pi,0,sizeof(pi));
scanf("%s",s);
n=strlen(s);
for (i=n-1;i>=0;i--)
s[i+1]=s[i];
pi[0]=-1;
pi[1]=0;
for (i=2;i<=n;i++)
{
x=pi[i-1];
if (s[x+1]==s[i])
pi[i]=x+1;
else
{
while (x>=0)
{
x=pi[x];
if (x<0)
break;
if (s[x+1]==s[i])
{
pi[i]=x+1;
break;
}
}
}
}
mx=0;
for (i=1;i<=n;i++)
if ((i/(i-pi[i])>=2)&&(i%(i-pi[i])==0))
mx=i;
printf("%d\n",mx);
}
return 0;
}