Pagini recente » Cod sursa (job #1372932) | Cod sursa (job #625196) | Cod sursa (job #2843455) | Cod sursa (job #1267313) | Cod sursa (job #1827488)
#include <stdio.h>
#include <string.h>
using namespace std;
FILE*f=fopen("prefix.in","r");
FILE*g=fopen("prefix.out","w");
char s[1000005];int urm[1000005];
int main()
{
int t,i,k,n,j,mx,ok;
fscanf(f,"%d\n",&t);
for (i=1;i<=t;i++)
{
fscanf(f,"%s\n",s);
n=strlen(s);
k=0;
urm[1]=0;
for (j=2;j<=n;j++)
{
while (k>0&&s[k]!=s[j-1]) k=urm[k];
if (s[k]==s[j-1]) k++;
urm[j]=k;
}
mx=0;
for (j=n;j>=2;j--)
{
while (j<urm[j]*2) urm[j]=urm[urm[j]];
if (urm[j]*2==j) {mx=j;break;}
else if (j-urm[j]*2<=urm[j])
{
ok=1;
for (k=1;k<=j-urm[j]*2;k++)
if (s[k]!=s[k+urm[j]]) {ok=0;break;}
if (ok) {mx=j;break;}
}
}
fprintf(g,"%d\n",mx);
}
fclose(f);
fclose(g);
return 0;
}