Pagini recente » Cod sursa (job #1841225) | Cod sursa (job #2081026) | Cod sursa (job #68668) | Cod sursa (job #1893319) | Cod sursa (job #2066956)
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 1000005
using namespace std;
int n, t, poz[N], nr, lung_max;
char s[N];
void prefix()
{
int j=0, st=1;
for(int i=2;i<=n;i++)
{
while(j && s[j+1]!=s[i])
j=poz[j];
if(s[j+1]==s[i])
j++;
poz[i]=j;
}
}
void parcurgere()
{
for(int i=2;i<=n;i++)
if(poz[i] && i%(i-poz[i])==0)
{
if(lung_max<i-poz[i])
lung_max=i-poz[i], nr=1;
if(lung_max==i-poz[i])
nr++;
}
}
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d\n", &t);
for(int test=1;test<=t;test++)
{
fgets(s+1, N, stdin);
n=strlen(s+1)-1;
nr=1;
s[n+1]='\0';
memset(poz, 0, sizeof(poz));
prefix();
lung_max=0;
parcurgere();
printf("%d\n", nr*lung_max);
}
return 0;
}