Pagini recente » Cod sursa (job #1882767) | Cod sursa (job #106) | Cod sursa (job #1839483) | Cod sursa (job #3210874) | Cod sursa (job #1325688)
#include<cstdio>
#include<string.h>
using namespace std;
const int NMAX = 1000005;
char s[NMAX];
int p[NMAX], m;
void prefix()
{
int k = 0;
p[1] = p[0] = 0;
for(int i = 2; i <= m; i++)
{
while(k > 0 && s[i] != s[k + 1])
k = p[k];
if(s[i] == s[k + 1])
k++;
p[i] = k;
}
}
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int n, i, j;
scanf("%d\n", &n);
for(i = 1; i <= n; i++)
{
gets(s + 1);
m = strlen(s + 1);
prefix();
for(j = m; j >= 1; j--)
if(p[j] > 0 && j % (j - p[j]) == 0)
{
printf("%d \n", j);
break;
}
if(j == 0)
printf("0\n");
memset(p, 0, sizeof(p));
scanf("\n");
}
return 0;
}