Pagini recente » Cod sursa (job #2650629) | Cod sursa (job #860000) | Cod sursa (job #808341) | Cod sursa (job #2069623) | Cod sursa (job #485804)
Cod sursa(job #485804)
#include <stdio.h>
#include <string.h>
using namespace std;
FILE *f=fopen("prefix.in","r"),*g=fopen("prefix.out","w");
int n,i,pr[1000010],k,j,sol,len;
char s[1000010],c;
int main(void)
{
fscanf(f,"%d",&n);
fscanf(f,"%c",&c);
for (j=1;j<=n;j++)
{
fgets(s,1000000,f);
len=strlen(s);
len-=2;
for (i=0;i<=len;i++)
pr[i]=0;
k=-1;
sol=-1;
pr[0]=-1;
for (i=1;i<=len;i++)
{
while (k!=-1 && s[i]!=s[k+1])
k=pr[k];
if (s[k+1]==s[i])
k++;
pr[i]=k;
if (k!=-1 && (i+1)%(i-k)==0 && sol<i)
sol=i;
}
fprintf(g,"%d\n",sol+1);
}
fclose(g);
return 0;
}