Pagini recente » Cod sursa (job #1577531) | Cod sursa (job #1398331) | Cod sursa (job #2118568) | Cod sursa (job #2601741) | Cod sursa (job #179207)
Cod sursa(job #179207)
#include <stdio.h>
#include <string.h>
#define NM 1000001
int t, n;
char s[NM];
int p[NM];
int i, j, k, kmax;
void Prefix();
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d", &t);
while ( t )
{
t--;
scanf("%c", &s[0]), scanf("%s", &s);
Prefix();
for ( k = 2; k <= n; k++ )
if ( p[k] > 0 && k % (k-p[k]) == 0 )
kmax = k;
printf("%d\n", kmax);
}
return 0;
}
void Prefix()
{
p[1] = 0; k = 0, n = strlen(s);
for ( i = 1; i < n; i++ )
{
while ( k > 0 && s[k] != s[i] )
k = p[k];
if ( s[i] == s[k] ) k++;
p[i+1] = k;
}
}