Pagini recente » Cod sursa (job #762600) | Cod sursa (job #1788503) | Cod sursa (job #3278532) | Cod sursa (job #2984344) | Cod sursa (job #679534)
Cod sursa(job #679534)
#include <cstdio>
#include <cstring>
#define sz 1000002
char P[sz];
int prefixFunc[sz], T;
void computePF(int len);
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d\n", &T);
for (int i = 1 ; i <= T ; ++i)
{
gets(P + 1);
int len = strlen(P + 1);
computePF(len);
bool ok = false;
for (int i = len ; i > 1 ; --i)
{
if (prefixFunc[i] > 0 && i % (i - prefixFunc[i]) == 0)
{
printf("%d\n", i);
ok = true;
break;
}
}
if (ok == false)
{
printf("0\n");
}
}
return 0;
}
void computePF(int len)
{
int k = 0;
prefixFunc[1] = 0;
for (int q = 2 ; q <= len ; ++q)
{
while (k > 0 && P[k + 1] != P[q])
k = prefixFunc[k];
if (P[k + 1] == P[q])
k++;
prefixFunc[q] = k;
}
}