Pagini recente » Cod sursa (job #2043043) | Cod sursa (job #2021065) | Cod sursa (job #1548064) | Istoria paginii runda/wellcodesimulare2martieclasa11-12/clasament | Cod sursa (job #172641)
Cod sursa(job #172641)
#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;
dif=i-pi[i];
if (ver(i)&&i>max&&pi[i]!=0)
max=i;
}
fprintf(out,"%d\n",max);
}
fclose(in);
fclose(out);
return 0;
}