Pagini recente » Statistici Ciort Elena Cristina (Cristina-Elena) | Cod sursa (job #164914) | Cod sursa (job #2912552) | Cod sursa (job #705931) | Cod sursa (job #172643)
Cod sursa(job #172643)
#include <stdio.h>
#include <string.h>
int dif,pi[1000005];
char s[1000000];
int ver(int i)
{
if (dif<=0)
return 0;
if (i==dif)
return 1;
if (i-pi[i]==dif)
return ver(pi[i]);
else
return 0;
}
int main()
{
FILE *in,*out;
int t,k,i,max,x,y;
in=fopen("prefix.in","r");
out=fopen("prefix.out","w");
fscanf(in,"%d",&t);
for (k=1;k<=t;k++)
{
fscanf(in,"%s",s+1);
pi[1]=0;
x=strlen(s+1);
max=0;
y=0;
for (i=2;i<=x;i++)
{
while (s[y+1]!=s[i]&&y)
y=pi[y];
if (s[y+1]==s[i])
y++;
pi[i]=y;
}
for (i=x;i>=2;i--)
{
dif=i-pi[i];
if (ver(i)&&i>max&&pi[i]!=0)
{
max=i;
break;
}
}
fprintf(out,"%d\n",max);
}
fclose(in);
fclose(out);
return 0;
}