Pagini recente » Cod sursa (job #187011) | Cod sursa (job #651523) | Cod sursa (job #3238425) | Cod sursa (job #1252386) | Cod sursa (job #584458)
Cod sursa(job #584458)
#include<stdio.h>
#include<string.h>
#define dim 1000001
using namespace std;
int m,urm[dim],x,k,i,a,n;
char P[dim];
FILE *f=fopen("prefix.in","r"), *g=fopen("prefix.out","w");
void prefix()
{
a=k=0;;
memset(urm,0,sizeof urm);
for(x=2;x<=m;x++)
{
while( k && P[k+1]!=P[x] )
k=urm[k];
if(P[k+1]==P[x])
k++;
urm[x]=k;
if(x%(x-k)==0&&k)
a=x;
}
fprintf(g,"%d\n",a);
}
int main()
{
fscanf(f,"%d",&n);
P[0]='0';
for(i=1;i<=n;i++)
{
fscanf(f,"%s",&P[1]);
m=strlen(P)-1;
prefix();
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}