Pagini recente » Cod sursa (job #2643082) | Cod sursa (job #1743660) | Cod sursa (job #2726055) | Cod sursa (job #2063230) | Cod sursa (job #5190)
Cod sursa(job #5190)
# include <stdio.h>
# include <string.h>
# define _fin "prefix.in"
# define fout "prefix.out"
# define maxn 1100000
char a[maxn];
int p[maxn], l, sol;
void prefix()
{
int k=0, q;
for (q=2; q<=l; q++)
{
while ( k>0 && a[k+1] != a[q] ) k = p[k];
if ( a[k+1] == a[q] ) ++k;
p[q] = k;
}
}
void solve()
{
memset(p,0,sizeof(p));
prefix();
int i;
for (sol=0, i=1; i<=l; i++)
if ( p[i] > 0 && i % ( i-p[i] ) == 0 ) sol = i;
}
int main()
{
FILE *fin=fopen(_fin, "r");
freopen(fout, "w", stdout);
int t;
# define cut(a) ( a[ strlen(a)-1 ] == '\n' ? a[ strlen(a)-1 ] = 0 : (0) )
for (fscanf(fin, "%d\n", &t); t; --t)
{
fgets(a+1, maxn, fin), cut(a), a[0]=0x30;
l = strlen(a);
solve();
printf("%d\n", sol);
}
return 0;
}