Pagini recente » Cod sursa (job #2303708) | Cod sursa (job #1594698) | Cod sursa (job #883075) | Cod sursa (job #1307983) | Cod sursa (job #760906)
Cod sursa(job #760906)
#include<stdio.h>
#include<string.h>
#define LMAX 1000005
char S[ LMAX ];
int L[ LMAX ], n, len, max;
FILE *f = fopen("prefix.in", "r");
FILE *g = fopen("prefix.out", "w");
void read()
{
int i;
fgets(S, 1000003, f);
len = strlen(S) - 1;
for(i = len; i; i--)
S[i] = S[i-1];
}
void Prefix()
{
int k = 0, i;
max = L[1] = 0;
for(i = 2; i <= len; i++)
{
k = L[i-1];
while(k > 0 && S[k+1] != S[i])
k = L[k];
if(S[k+1] == S[i])
k++;
L[i] = k;
}
}
void write()
{
int i;
for(i = len; i; i--)
if(L[i] && !(i % (i - L[i] ) ) )
{
max = i;
break;
}
fprintf(g, "%d\n", max);
}
int main()
{
fscanf(f, "%d", &n);
fgets(S, 3, f);
while(n)
{
read();
Prefix();
write();
n--;
}
fclose(f);
fclose(g);
return 0;
}