Pagini recente » Cod sursa (job #1730517) | Cod sursa (job #2834594) | Cod sursa (job #2713149) | Cod sursa (job #481377) | Cod sursa (job #2350997)
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
char s[1000003];
int n;
int prefix[1000003];
void pref()
{
int k = 0;
for(int i = 2; i<=n; i++)
{
while(s[i] != s[k+1] && k>0)
{
k = prefix[k];
}
if(s[i] == s[k+1])
{
k++;
}
prefix[i] = k;
}
}
void afis()
{
for(int j = n; j>=1; j--)
{
if(prefix[j] >= (j+1)/2 && prefix[j]%(j-prefix[j]) == 0)
{
printf("%d\n", j);
return;
}
}
printf("0\n");
}
void rez()
{
int t;
scanf("%d\n", &t);
for(int i = 0; i<t; i++)
{
memset(prefix, 0, sizeof(prefix));
fgets(s+1, 1000003, stdin);
n = strlen(s+1)-1;
pref();
/*for(int i = 1; i<=n; i++)
{
printf("%d ", prefix[i]);
}
printf("\n");*/
afis();
}
}
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
rez();
return 0;
}