Pagini recente » Rezultatele filtrării | Arhiva de probleme | Borderou de evaluare (job #1148444) | Borderou de evaluare (job #721384) | Cod sursa (job #36286)
Cod sursa(job #36286)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char line[1048576], p[1048576];
int n, pi[1048576], t;
void prefix();
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d ", &t);
int test, i, ok;
for(test = 0; test < t; ++test)
{
gets(line);
scanf(" ");
for(i = 1; i <= n; ++i)
pi[i] = 0;
n = 0;
for(i = 0; i < strlen(line); ++i)
{
if(isalpha(line[i]))
{
p[++n] = line[i];
}
}
prefix();
ok = 0;
for(i = n; i > 0; --i)
{
if(pi[i] && i % (i - pi[i]) == 0)
{
printf("%d\n", i);
ok = 1;
break;
}
}
if(!ok)
printf("0\n");
}
return 0;
}
void prefix()
{
int i, k = 0;
for(i = 2; i <= n; ++i)
{
while(p[k + 1] != p[i] && k)
k = pi[k];
if(p[k + 1] == p[i])
++k;
pi[i] = k;
}
}