Pagini recente » Cod sursa (job #2641681) | Cod sursa (job #1256778) | Cod sursa (job #798452) | Cod sursa (job #2898335) | Cod sursa (job #5187)
Cod sursa(job #5187)
# include <stdio.h>
# include <string.h>
# define fin "prefix.in"
# define fout "prefix.out"
# define maxn 100100
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()
{
freopen(fin, "r", stdin);
freopen(fout, "w", stdout);
int t;
# define cut(a) ( a[ strlen(a)-1 ] == '\n' ? a[ strlen(a)-1 ] = 0 : (0) )
for (scanf("%d\n", &t); t; --t)
{
gets(a+1), cut(a), a[0]=0x30;
l = strlen(a);
solve();
printf("%d\n", sol);
}
return 0;
}